Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamic 如何获取动态创建的selectlist组件的选定值_Dynamic_Controller_Salesforce_Apex Code_Visualforce - Fatal编程技术网

Dynamic 如何获取动态创建的selectlist组件的选定值

Dynamic 如何获取动态创建的selectlist组件的选定值,dynamic,controller,salesforce,apex-code,visualforce,Dynamic,Controller,Salesforce,Apex Code,Visualforce,我不确定这是否可能,但我正在尝试获取VisualForce Apex控制器类中动态创建的SelectList的值 我正在使用下面的代码为特定对象(例如联系人)中的每个字段动态创建一个selectlist,但现在我不知道如何获取所选值。我曾尝试在构造函数中和单独的一行上设置每个的值(不在下面的代码示例中),但这似乎不起作用 VisualForce页面: <apex:dynamicComponent componentValue="{!contactPageBlockSection}" /&g

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

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

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);
}
public Component.Apex.PageBlockSection GetContactPageBlockSection(string objectName)
{
地图领域地图;
FieldMap=Schema.SObjectType.Contact.fields.getMap();
Set FieldSet=FieldMap.keySet();
列表字段列表=新列表();
FieldList.addAll(字段集);
FieldList.sort();
Component.Apex.PageBlockSection pbs=新的Component.Apex.PageBlockSection(列=2);
for(字符串字段名:字段列表)
{
Component.Apex.PageBlockSectionItem pbsi=新组件.Apex.PageBlockSectionItem();
Schema.DescribeFieldResult字段=(FieldMap.get(fieldName)).getDescribe();
if(field.isUpdateable()&&field.IsAccessible())
{
Schema.DisplayType dt=field.getType();
Component.Apex.OutputLabel lblText=新的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;);
如果(dt==Schema.DisplayType.Integer | | dt==Schema.DisplayType.Double | | dt==Schema.DisplayType.Currency | | dt==Schema.DisplayType.Percent)
{
AddSelectOption(卖方列表,“保持最高值”);
AddSelectOption(卖方列表,“保持最低值”);
AddSelectOption(卖方列表,“保留主值”);
pbsi.childComponents.add(卖方列表);
pbs.childComponents.add(pbsi);
}
}
}
返回pbs;
}
私有void AddSelectOption(Component.Apex.SelectList selList,字符串选项)
{
Component.Apex.SelectOption selpoption=新建Component.Apex.SelectOption();
selOption.itemLabel=选项;
selOption.itemValue=选项;
selList.childComponents.add(selOption);
}

非常感谢提前

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

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

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

您可以尝试使用动态visualforce绑定。即

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

但是,我从未在dynamic visualforce中使用过dynamic visualforce绑定,因此请注意emptor。

感谢您的回复,但是在动态创建SelectList时,我不知道对象中将包含多少字段,因此无法创建正确数量的变量来保存每个字段的值。我想知道是否有一种方法可以直接引用页面上的值或其他内容???