【问题标题】:How can I pass a list literal to f:selectItems?如何将列表文字传递给 f:selectItems?
【发布时间】:2015-03-05 15:51:52
【问题描述】:

例如:

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

这行不通,但你明白了吗?

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

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

【问题讨论】:

    标签: jsf el literals selectmanycheckbox


    【解决方案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>
    

    您已经很接近了,您只需引用字符串值并将整个值放入#{...}

    请注意,在 &lt;h:selectManyCheckbox value&gt; 中指定文字会失败,并在提交时出现 PropertyNotWritableException,但这是一个不同的问题。

    【讨论】:

    • 虽然这可行,但出于性能原因在 EL 中没有这种“复杂性”并在 bean 中懒惰不是更好吗?
    • @Kukeltje:我在这里没有看到性能问题。但是,设计明智的模型值肯定属于模型。但是OP这么问,这并非不可能:)
    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多