0

これはリッチフェイス 4.0 に関連しています。

Web ページに 2 つのドロップダウンがあります。最初のドロップダウンで項目を選択すると、2 番目のドロップダウン (以前は非表示) が Web ページに簡単にレンダリングされます。

2番目のドロップダウンでアイテムを選択すると、別のパネルをレンダリングしたい(これはできません)。

問題は、最初のドロップダウンから項目を選択した後、Web ページで 2 番目の DropDown を正常にレンダリングできることですが、2 番目の dropDown item を選択しているときにパネルがレンダリングされないことです。

私のコードは次のとおりです。

 <rich:panel header="Select Operation" style="margin-top: 20px;  height: 110px">
            <h:panelGrid columns="1">
                <h:form>
                    <h:panelGrid columns="4">
                        <h:outputLabel value="Operation: " style="font-size: small; font-weight: 900"/>
                        <h:selectOneMenu style="margin-left: 10px; width: 150px" value="#{adminBean.currentType}">                                
                            <f:selectItem itemValue="0" itemLabel="" />
                            <f:selectItem itemValue="1" itemLabel="Add New User" />
                            <f:selectItem itemValue="2" itemLabel="Manage Balance" />
                            <f:selectItem itemValue="3" itemLabel="Manage Account" />
                            <a4j:ajax event="valueChange" render="second" execute="@this" />                                
                        </h:selectOneMenu>

                        <h:form>
                            <a4j:outputPanel id="second" layout="block">
                                <h:outputLabel value="Type : " style="margin-left: 130px; font-size: small; font-weight: bold;" rendered="#{not empty adminBean.currentType}"/>
                                <h:selectOneMenu style="margin-left: 10px; width: 150px" value="#{adminBean.currentItem}" rendered="#{not empty adminBean.currentType}">
                                    <f:selectItem itemValue="0" itemLabel="" />
                                    <f:selectItem itemValue="1" itemLabel="Participant" />
                                    <f:selectItem itemValue="2" itemLabel="Administrator" />
                                    <a4j:ajax event="valueChange"  render="rep"  execute="@this" />   
                                </h:selectOneMenu>

                            </a4j:outputPanel>                            
                        </h:form>
                    </h:panelGrid>
                </h:form>

            </h:panelGrid>

        </rich:panel>                

        <rich:panel style="margin-top: 20px; min-height: 500px">

            <a4j:outputPanel id="rep">

                <rich:panel rendered="#{not empty adminBean.currentItem}" header="Add Customer">

                    <h:panelGrid columns="2">
                        <a4j:commandButton value="Add New" style="width: 70px"></a4j:commandButton>
                        <a4j:commandButton value="Delete" style="margin-left: 10px; width: 70px"></a4j:commandButton>
                    </h:panelGrid>

                    </rich:panel>
                   </a4j:outputPanel>
            </rich:panel> 

上で説明したように、 second から項目を選択するときに id="rep" をレンダリングする必要があります。

4

1 に答える 1

1

2つの問題があります。

  • ネストされたフォームがあり、HTMLが無効になっています。
  • コンポーネントにIDを与える必要があります。

これは修正されたコードである必要があります(ページをスタイルとして機能させるために、不要な属性をすべて削除したことに注意してください)。

<rich:panel id="pnlContainer">
    <h:panelGrid columns="1" id="grdSingleCol">
        <h:form id="frmData">
            <h:panelGrid columns="4" id="grdData">
                <h:selectOneMenu value="#{adminBean.currentType}">
                    <f:selectItem itemValue="0" itemLabel="" />
                    <f:selectItem itemValue="1" itemLabel="Add New User" />
                    <f:selectItem itemValue="2" itemLabel="Manage Balance" />
                    <f:selectItem itemValue="3" itemLabel="Manage Account" />
                    <a4j:ajax render="second" execute="@this" />
                </h:selectOneMenu>

                <a4j:outputPanel id="second" layout="block">
                    <h:selectOneMenu value="#{adminBean.currentItem}">
                        <f:selectItem itemValue="0" itemLabel="" />
                        <f:selectItem itemValue="1" itemLabel="Participant" />
                        <f:selectItem itemValue="2" itemLabel="Administrator" />
                        <!-- check how to render components outside the form -->
                        <a4j:ajax render=":pnlRepContainer:rep" execute="@this" />
                    </h:selectOneMenu>
                </a4j:outputPanel>
            </h:panelGrid>
        </h:form>
    </h:panelGrid>
</rich:panel>

<rich:panel id="pnlRepContainer">
    <a4j:outputPanel id="rep">
        <rich:panel rendered="#{not empty adminBean.currentItem}"
            header="Add Customer">
            <h:panelGrid columns="2">
                <a4j:commandButton value="Add New" />
                <a4j:commandButton value="Delete" />
            </h:panelGrid>
        </rich:panel>
    </a4j:outputPanel>
</rich:panel>
于 2013-03-22T06:59:12.243 に答える