0

これが可能かどうかはわかりませんが、VisualForce Apex コントローラ クラスで動的に作成された選択リストの値を取得しようとしています。

以下のコードを使用して、特定のオブジェクト (連絡先など) の各フィールドの選択リストを動的に作成していますが、選択した値を取得する方法がわかりません。コンストラクターと別の行 (以下のコード サンプルではありません) でそれぞれの値を設定しようとしましたが、うまくいかないようです。

VisualForce ページ:

<apex:dynamicComponent componentValue="{!contactPageBlockSection}" />

頂点コントローラー:

public Component.Apex.PageBlockSection GetContactPageBlockSection(string objectName)   
{
    Map<string, Schema.SObjectField> FieldMap;
    FieldMap = Schema.SObjectType.Contact.fields.getMap();
    Set<string> FieldSet = FieldMap.keySet();
    List<string> FieldList = new List<string>();
    FieldList.addAll(FieldSet);
    FieldList.sort();
    Component.Apex.PageBlockSection pbs = new Component.Apex.PageBlockSection(columns = 2);

    for (string fieldName : FieldList)
    {
        Component.Apex.PageBlockSectionItem pbsi = new Component.Apex.PageBlockSectionItem();
        Schema.DescribeFieldResult field = (FieldMap.get(fieldName)).getDescribe();

        if (field.isUpdateable() && field.IsAccessible())
        {
            Schema.DisplayType dt = field.getType();
            Component.Apex.OutputLabel lblText = new Component.Apex.OutputLabel(escape = false);
            lblText.value = field.getLabel();
            pbsi.childComponents.add(lblText);

            Component.Apex.SelectList selList = new Component.Apex.SelectList(id = field.getName(), multiselect = false, size = 1, style = 'width:200px;');

            if (dt == Schema.DisplayType.Integer || dt == Schema.DisplayType.Double || dt == Schema.DisplayType.Currency || dt == Schema.DisplayType.Percent)
            {
                AddSelectOption(selList, 'Keep highest value');
                AddSelectOption(selList, 'Keep lowest value');
                AddSelectOption(selList, 'Keep master value');
                pbsi.childComponents.add(selList);
                pbs.childComponents.add(pbsi);
            }
        }
    }

    return pbs;
}

private void AddSelectOption(Component.Apex.SelectList selList, string option)
{
     Component.Apex.SelectOption selOption = new Component.Apex.SelectOption();
     selOption.itemLabel = option;
     selOption.itemValue = option;
     selList.childComponents.add(selOption);
}

よろしくお願いします

4

2 に答える 2

0

次のような式構文を使用して、動的に作成された選択リストの値属性を文字列プロパティにバインドするだけです。

String selectedValue {get; set;}
...
setList.expressions.value = '{!selectedValue}';

プロパティは、選択リストの静的宣言定義の場合と同様に、選択された値を格納する必要があります。

于 2012-07-06T08:22:46.360 に答える
0

動的な visualforce バインディングを試すことができます。IE

map<String,String> FieldToString {get; set;}
...
selList.expressions.value = '{!FieldToString[\'' + fieldname + '\']}';

ただし、動的 ​​visualforce 内で動的 visualforce バインディングを使用したことがないため、emptor に注意してください。

于 2012-07-08T17:12:43.440 に答える