【问题标题】:Custom selectItems自定义选择项
【发布时间】:2012-01-20 01:40:39
【问题描述】:

我想自定义 selectItems 在每个复选框旁边有条件地显示图像 所以首先我尝试显示所有复选框的图像 但它只显示一次,这是我尝试过的:

<h:selectManyCheckbox value="#{myBean.checkboxesArry}" layout="pageDirection">

              <f:selectItems value="#{myBean.mapOfCheckBoxes}" var="entry">                            
                <label>           
                <ice:graphicImage url="/resources/images/myImage.bmp"/>            
                <b>#{entry.value}</b>           
                </label>
              </f:selectItems>

            </h:selectManyCheckbox>

请告知如何实现?

【问题讨论】:

    标签: jsf jakarta-ee jsf-2 icefaces icefaces-2


    【解决方案1】:

    您不能以这种方式将 UI 组件嵌套在 &lt;f:selectItems&gt; 中。但是,我看到您使用的是 ICEfaces,然后您应该可以将 &lt;ice:selectManyCheckbox layout="spread"&gt;&lt;ice:checkbox&gt; 结合使用。

    <ice:selectManyCheckbox id="foo" value="#{myBean.checkboxesArry}" layout="spread">
        <f:selectItems value="#{myBean.mapOfCheckBoxes}" />
    </ice:selectManyCheckbox>
    
    <c:forEach items="#{myBean.mapOfCheckBoxes}" var="entry" varStatus="loop">
        <ice:checkbox for="foo" index="#{loop.index}" />
        <ice:graphicImage url="/resources/images/myImage.bmp" />
        <b>#{entry.value}</b>
    </c:forEach>
    

    (未经测试,因为我不使用 ICEfaces,但上述构造适用于 Tomahawk,ICEfaces 基本上已从中复制了实现;您也可以使用 &lt;ui:repeat&gt;,但它仅支持 Map,因为 JSF 2.1 )

    另见:

    【讨论】:

    • 当我尝试根本没有出现任何复选框时,我是否必须在 id 之前包含表单名称?
    • 只是为了测试,如果您使用固定ID单独指定复选框怎么办?就像&lt;ice:checkbox for="foo" index="0" /&gt; 等。如果可行,请尝试使用&lt;ui:repeat&gt; 而不是&lt;c:forEach&gt;,如果您还没有使用JSF 2.1,则只能使用List 而不是Map
    • fixed id 工作正常,但 ui:repeat 也不起作用,奇怪!有什么想法吗?
    • 好吧,调试后我发现我做错了什么,我在 prerenderView 方法中初始化地图,而地图在该阶段之前被 foreach 访问,不完全明白为什么,但现在可以正常使用了。
    • 但是有没有一种方法可以根据使标签加粗的条件使复选框的标签动态化?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    相关资源
    最近更新 更多