1

バッキングBeanにHashMapがあり、複数の選択ボックスを動的にレンダリングしたいと思います。コードは次のとおりです。

    <h:selectManyCheckbox
      id="id"
      value="#{backingBean.value}"
      layout="pageDirection"
      styleClass="label"
      required="true"
      requiredMessage="You must select at least...">


      <a4j:repeat var="aGroup" items="#{backingBean.map}">

        <f:selectItem id="role#{aGroup.value.property1}" itemLabel="#{aGroup.value.property1}" itemValue="#{aGroup.value.property2}" />

        <rich:tooltip for="role" value="#{aGroup.value.property5}" />

     </a4j:repeat>

    </h:selectManyCheckbox> 

レンダリングではありません。f:selectItemsタグを使用してレンダリングしていますが、各f:selectItemにrich:tooltipをアタッチする必要があるため、f:selecteItemを手動で作成する必要があります。

何か案は ?

ラヴィ

4

2 に答える 2

1

に追加のマークアップ/コンポーネントを追加することはできません<f:selectItem>

また、標準の JSF または RichFaces ライブラリには、チェックボックス グループのラベルに自由にマークアップできるものはありません。で使用する場合、トマホーク<t:selectManyCheckbox>のみがサポートします。PrimeFaces には、この機能もスケジュールどおりに搭載されています。layout="spread"<t:checkbox><p:selectManyCheckbox>

トマホークでそれを実現するキックオフの例を次に示します。

<!-- Below displays nothing due to layout="spread". -->
<t:selectManyCheckbox id="foo" value="#{bean.selectedItems}" layout="spread">
    <f:selectItems value="#{bean.availableItems}" />
</t:selectManyCheckbox>

<!-- Below displays the concrete checkboxes with labels. -->
<c:forEach items="#{bean.availableItems}" var="item" varStatus="loop">
    <t:checkbox for="foo" index="#{loop.index}" />
    <h:outputLabel id="label#{loop.index}" value="#{item.label}" />
    <rich:tooltip for="label#{loop.index}" value="#{item.tooltip}" />
</c:forEach>
于 2012-12-18T11:49:46.973 に答える
0

<c:forEach>の代わりに使用してください<a4j:repeat>

まず、この名前空間をページの上部に追加します。

xmlns:c="http://java.sun.com/jstl/core"

これに置き換え<a4j:repeat.....ます。

<c:forEach var="aGroup" items="#{backingBean.map}">

編集:


には当てはまらないと思い<rich:toolTip>ます<f:selectItem>。奇妙なハックとして、あなたはこのようなことをすることができます。

これは、またはmanaged-beanを返すyourです。ここでは、地図を使用しているように見えるので、地図を使用しています。listmap

public class MyBean {
  private Map<Integer, String> map;

  public Map<Integer, String> getMap() {
    map = new HashMap<Integer, String>();
    map.put(1, "Tool tip 1");
    map.put(2, "Tool tip 2");
    map.put(3, "Tool tip 3");
    return map;
  }
}

xhtmlこれで、コードは次のようになります。selectItemここでは、 sを動的にレンダリングしています。ただし、これが機能するためにこれは必要ありません。

<h:form id="myForm">
    <h:selectManyCheckbox id="myChkBox" layout="pageDirection" styleClass="label" required="true" requiredMessage="You must select at least...">
        <c:forEach var="aGroup" items="#{myBean.map}">
            <f:selectItem itemValue="someValue1" itemLabel="someValue1" id="someId#{aGroup.key}" /> 
            <span class="rich-tool-tip" id="span#{aGroup.key}" style="z-index: 99; visibility: visible; display: none;">
                <span>#{aGroup.value}</span>
            </span>
            <script>
                var i = !i ? 0 : i;
                new ToolTip("span#{aGroup.key}","myForm:myChkBox:" + i,{'showEvent':'mouseover'} );
                i++;
            </script>
        </c:forEach>
    </h:selectManyCheckbox>
    <rich:toolTip rendered="false"/>
</h:form>

それだけです...として設定されていることに
注意してください。これは必須です。そうしないと、いくつかの重要なパーツがインポートされず、動作しなくなります。<rich:toolTip>rendered="false"JStoolTip

于 2012-12-18T05:28:28.817 に答える