如何在h:selectOneRadio项目附近显示某些内容?

时间:2013-01-25 20:11:09

标签: jsf jsf-2 radio-button selectoneradio

我有一些元素列表,它们生成我的<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>

我希望接下来每个元素显示<h:outputText>的值为#{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之后显示所有radioButtons。

我想要类似下面的截图。当右边部分是例如ID时,它可以被加密和解密。

enter image description here

1 个答案:

答案 0 :(得分:3)

只需将其放入商品标签即可。

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"

或者,如果您确实希望将它们放在生成的<label>之外,那么请使用第三方组件库。这是<h:selectOneRadio>不支持的。例如,Tomahawk的<t:selectOneRadio>具有layout="spread"属性。

另见:


对具体问题

无关,您不需要<c:forEach>。那简单笨拙。只需使用<f:selectItems var>即可。这是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>

另见: