我想我可能会遗漏一些东西,但我看不出如何使用内置的多选择选项列表控件来处理除sObject字段以外的任何内容。
我说的是控件,其中包含标有“可用”和“已选定”的2个列表对象,其间带有箭头,用于在列表之间移动项目。对于用户来说,此控件是一种更容易且更易于发现的方式,可选择多个项目,然后选择selectList控件,需要Shift和Ctrl来选择多个项目。
使用selectList我不需要特定的sObject - 我可以将用户选择存储在我的控制器成员中,我甚至可以创建一个方法来提供有效值列表 - 这个方法可以是硬编码的,动态计算甚至使用查询来查找一些实时数据。
有没有办法使用花式选项列表控件,只是没有任何对特定sObject的引用,只是一个字符串值列表?
答案 0 :(得分:1)
不幸的是,使用任何标准字段类型(例如日期或多选选项列表)的唯一方法是让字段由SObject支持。
对我来说,当需要在Visualforce页面上使用这些类型的字段时,我将专门创建一个Object,以便为字段提供后端。在Apex控制器中,只需实例化您的对象(无需提供任何值)并在页面上引用该对象的字段。
虽然从配置方面看起来效率可能不高,但它有许多额外的好处,例如使用默认UI(自动受SFDC所做的任何改进)以及利用任何内置验证。
如果您没有使用SObject支持该字段,那么可能会有一些jquery多选项可用。我已经看过很多,但还没有真正测试过。
答案 1 :(得分:1)
:
public List<SelectOption> getStoryItems()
{
List<SelectOption> options = new List<SelectOption>();
options.add(new SelectOption('SAM','Sam I Am'));
options.add(new SelectOption('GEORGE','George of the Jungle'));
options.add(new SelectOption('DORA','Dora the Explorer'));
return options;
}
String[] stories= new String[]{};
public String[] getStories()
{
return stories;
}
public void setStories(String[] stories)
{
this.stories= stories;
}
在您的页面中:
<apex:selectList value="{!stories}" multiselect="true">
<apex:selectOptions value="{!getStoryItems}"/>
</apex:selectList>
结果将以逗号分隔,如果您不想选择多个,只需将multiselect设置为false