如何将列表文字传递给 f:selectItems?
How can I pass a list literal to f:selectItems?
例如:
<h:selectManyCheckbox
id="literalOptions"
value="firstOption">
<f:selectItems value="[firstOption, secondOption, thirdOption]"/>
</h:selectManyCheckbox>
这行不通,但你明白了吗?
我想传递文字(字符串类型)列表选项(不一定但可能作为字符串从 bean 属性 中检索),[a,b,c]
列表语法可能不正确, 但哪个是?
或者,我如何将列表文字传递给我创建的自定义组件,该自定义组件将此文字传递给我在自定义组件内部使用的 f:selectItems
?也就是说,我如何创建一个自定义组件,它接受组件用户对列表值的临时定义的这种文字。
如果您使用的是 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
,但这是一个不同的问题。
例如:
<h:selectManyCheckbox
id="literalOptions"
value="firstOption">
<f:selectItems value="[firstOption, secondOption, thirdOption]"/>
</h:selectManyCheckbox>
这行不通,但你明白了吗?
我想传递文字(字符串类型)列表选项(不一定但可能作为字符串从 bean 属性 中检索),[a,b,c]
列表语法可能不正确, 但哪个是?
或者,我如何将列表文字传递给我创建的自定义组件,该自定义组件将此文字传递给我在自定义组件内部使用的 f:selectItems
?也就是说,我如何创建一个自定义组件,它接受组件用户对列表值的临时定义的这种文字。
如果您使用的是 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
,但这是一个不同的问题。