1

<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>を value#{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 の場合、暗号化および復号化できます。

ここに画像の説明を入力

4

1 に答える 1

3

商品ラベルに貼るだけ。

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

または逆に、あなたはそれについて明確ではありませんでした。

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

必要に応じて HTML を使用することもできますが、姓のXSS 攻撃穴だけに注意する必要があります。

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

または、実際に生成された の外に置きたい場合は<label>、サードパーティのコンポーネント ライブラリを使用してください。つまり、これは ではサポートされていません<h:selectOneRadio>。たとえば、トマホークにはそのため<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>

以下も参照してください。

于 2013-01-25T20:16:08.917 に答える