如何将列表文字传递给f:selectItems?

时间:2015-03-05 15:51:53

标签: jsf el literals selectmanycheckbox

例如:

<h:selectManyCheckbox
    id="literalOptions"
    value="firstOption">
    <f:selectItems value="[firstOption, secondOption, thirdOption]"/>
</h:selectManyCheckbox>

这不起作用,但你明白了吗?

我想传递文字(字符串类型)列表选项(不一定但可能从bean属性中检索为String),[a,b,c]列表语法可能不正确,但是?

或者,或者,如何将列表文字传递给我创建的自定义组件,该组件将此文字传递给我在自定义组件内部使用的f:selectItems?也就是说,如何创建一个自定义组件,接受组件用户对列表值的临时定义的这种文字。

1 个答案:

答案 0 :(得分:1)

如果您使用的是Java EE 6,请使用JSTL fn:split()技巧。

<html ... xmlns:fn="http://java.sun.com/jsp/jstl/functions">
...
<h:selectManyCheckbox value="firstOption">
    <f:selectItems value="#{fn:split('firstOption,secondOption,thirdOption', ',')}"/>
</h:selectManyCheckbox>

如果您使用的是Java EE 7,请使用EL 3.0 collection literal

<h:selectManyCheckbox value="firstOption">
    <f:selectItems value="#{['firstOption', 'secondOption', 'thirdOption']}"/>
</h:selectManyCheckbox>

你很接近,你只需引用字符串值并将整数放入#{...}

请注意,在<h:selectManyCheckbox value>中指定文字会因提交PropertyNotWritableException而失败,但这是一个不同的问题。