Question

I have some list of elements, that generates my <h:selectOneRadio> items:

<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>

I want next each element display <h:outputText> with value #{c.id}, so that at each row will be my radioButton element and next it some textbox. How can I do it ?

I tried something like that:

<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>

But it deisplays all radioButtons after last outputText.

I want something like the below screenshot. When right part is for example IDs, then it can be encrypted and decrypted.

enter image description here

Était-ce utile?

La solution

Just put it in the item label.

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

Or the other way round, you was not clear on that.

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

You can if necessary use HTML like so, you should only beware of XSS attack hole in the surname.

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

Or, if you actually want to have them outside the generated <label>, then use a 3rd party component library. This is namely not supported by <h:selectOneRadio>. For example, Tomahawk's <t:selectOneRadio> has a layout="spread" attribute for that.

See also:


Unrelated to the concrete problem, you don't need that <c:forEach>. That's plain clumsy. Just use <f:selectItems var>. This is new since JSF 2.0, perhaps you were focusing too much on ancient JSF 1.x targeted resources.

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

See also:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top