【问题标题】:How to get the selected value of a dynamically created selectlist component如何获取动态创建的选择列表组件的选定值
【发布时间】:2012-07-05 21:08:43
【问题描述】:

我不确定这是否可能,但我正在尝试获取 VisualForce Apex 控制器类中动态创建的选择列表的值。

我正在使用下面的代码为特定对象(例如联系人)中的每个字段动态创建一个选择列表,但现在我不知道如何取回所选值。我尝试在构造函数中和单独的行(不在下面的代码示例中)设置 each 的值,但这似乎不起作用。

VisualForce 页面:

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

Apex 控制器:

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);
}

在此先感谢

【问题讨论】:

    标签: dynamic controller salesforce apex-code visualforce


    【解决方案1】:

    只需使用表达式语法将动态创建的选择列表的 value 属性绑定到字符串属性:

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

    然后该属性应存储选定的值,就像它在选择列表的静态声明性定义中一样。

    【讨论】:

    • 感谢您的回复,但是在动态创建选择列表时,我不知道对象中有多少字段,因此无法创建正确数量的变量来保存每个变量的值。我想知道是否有办法直接引用页面上的值之类的???
    【解决方案2】:

    您可以尝试使用动态视觉强制绑定。即。

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

    但是,我从来没有在动态视觉强制中使用过动态视觉强制绑定,所以请谨慎购买。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多