【问题标题】:How display something near h:selectOneRadio item?如何在 h:selectOneRadio 项目附近显示一些东西?
【发布时间】:2013-01-09 21:03:49
【问题描述】:

我有一些元素列表,它们会生成我的 <h:selectOneRadio> 项目:

<h:selectOneRadio id="list#{cand.id}" value="#{mybean.value}" layout="pageDirection">
    <c:forEach items="#{mybean.list}" var="c">
        <f:selectItem id="first#{c.id}" itemlabel="#{c.surname}" itemValue="#{c.name}" />
    </c:forEach>
</h:selectOneRadio>

我希望接下来每个元素显示&lt;h:outputText&gt; 和值#{c.id},这样每一行都是我的radioButton 元素,然后是一些文本框。我该怎么做 ?

我尝试过类似的方法:

<h:selectOneRadio id="candidates1#{cand.id}" value="#{candidates.selectedCandidate1}" layout="pageDirection">
    <c:forEach items="#{candidates.c1}" var="cand">
        <td>
            <f:selectItem id="first#{cand.id}" itemlabel="#{cand.surname}" itemValue="#{cand.name}">
                <h:outputText id="c1ShortName#{cand.id}" value="#{cand.id}" />
            </f:selectItem>
        </td>
        <td>
            <h:outputText id="c1ShortName#{cand.id}" value="#{cand.id}" />
        </td>
    </c:forEach>
</h:selectOneRadio>

但它会在最后一个 outputText 之后取消显示所有单选按钮。

我想要类似下面的截图。当正确的部分是例如ID时,则可以对其进行加密和解密。

【问题讨论】:

    标签: jsf jsf-2 radio-button selectoneradio


    【解决方案1】:

    把它放在物品标签里就行了。

    itemlabel="#{c.id} #{c.surname}"
    

    或者反过来说,你并不清楚。

    itemlabel="#{c.surname} #{c.id}"
    

    如有必要,您可以像这样使用 HTML,您只应注意姓氏中的XSS attack hole

    itemlabel="#{c.surname} &lt;strong&gt;#{c.id}&lt;strong&gt;" itemEscaped="false"
    

    或者,如果您真的想将它们放在生成的&lt;label&gt; 之外,那么请使用第 3 方组件库。 &lt;h:selectOneRadio&gt; 不支持这一点。例如,Tomahawk 的 &lt;t:selectOneRadio&gt; 有一个 layout="spread" 属性。

    另见:


    与具体问题无关,您不需要&lt;c:forEach&gt;。这很笨拙。只需使用&lt;f:selectItems var&gt;。这是自 JSF 2.0 以来的新内容,也许您过于关注古老的 JSF 1.x 目标资源。

    <h:selectOneRadio ...>
        <f:selectItems value="#{mybean.list}" var="c" 
            itemlabel="#{c.id} #{c.surname}" itemValue="#{c.name}" />
    </h:selectOneRadio>
    

    另见:

    【讨论】:

    • 不,问题是,我想把他们分开。我需要它们处于不同的控件中。
    • &lt;h:selectOneRadio&gt; 无法做到这一点。我更新了答案。在未来的问题中,更清楚您想要在最终 HTML 标记中实现的目标,例如通过提供所需 HTML 输出的示例。
    • 所以用 MyFaces 是不可能的?
    • 不,这是不可能的。 UISelect 组件仅接受 UISelectItem(s) 子级。只需使用itemlabel="#{c.surname} #{c.id}"。我不明白您为什么需要将它放在单独的&lt;span&gt; 中。是为了造型目的吗?如果是这样,究竟是什么具体的功能要求要求你使用这个奇怪的结构?在任何情况下,如果您设置了itemEscaped="false",您始终可以在项目标签中使用 HTML。
    • 我目前的答案仍然有效。 &lt;t:selectOneRadio&gt; 可能是您最好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多