1

Webページに2つのprimefacesselectonmenusを使用する必要があります。

  1. 2番目のselectonmenuは、静的データがある場合に機能します。ボタンを押した後、ボタンをクリックするとすべてのデータが表示されます。

  2. ただし、このselectonmenuへのajaxデータロードを使用して最初のselectonmenuから値を選択した後、これにロードされる動的データデータでは機能しませんが、これから値を選択すると常にnull値が表示されます

これはポイント1のコードです

<p:tab id="create_Subnet_T" title="Create subnet">
<h:form id="create_Subnet">
    <h:panelGrid columns="2" cellpadding="10">

        <h:outputText value="Area:"/>
        <p:selectOneMenu id="AreaDDL" value="#{a_Subnet.selectedArea}" required="true">  
            <f:selectItem itemLabel="Select area" itemValue="" />  
            <f:selectItems value="#{a_Subnet.areaList}" />


        </p:selectOneMenu>

        <h:outputText id="create_Subnet_OT" value="IP Address :" />
        <p:selectOneMenu id="resourceDDL" value="#{a_Subnet.selectedResource}" required="true">  
            <f:selectItem itemLabel="Select resource" itemValue="A" />
            <f:selectItem itemLabel="Select resource" itemValue="B" />
            <f:selectItem itemLabel="Select resource" itemValue="C" />

        </p:selectOneMenu>

        <h:outputText id="netmask_OT" value="netmask :"  />
        <p:inputText id="netmask_IT"  required="true" value="#{a_Subnet.netmask}"/>

        <h:outputText id="description_OT" value="Description :" />
        <p:inputTextarea id="description_ITA" required="true" value="#{a_Subnet.description}"/>

        <p:commandButton id="create_Subnet_Btn" value="Create"  action="#{a_Subnet.test}" />

    </h:panelGrid>
</h:form>

これは機能しないコードです(ポイント2の場合):

<p:tab id="create_Subnet_T" title="Create subnet">
    <h:form id="create_Subnet">
        <h:panelGrid columns="2" cellpadding="10">

            <h:outputText value="Area:"/>
            <p:selectOneMenu id="AreaDDL" value="#{a_Subnet.selectedArea}" required="true">  
                <f:selectItem itemLabel="Select area" itemValue="" />  
                <f:selectItems value="#{a_Subnet.areaList}" />

                <p:ajax event="change" update=":Subnet_TV:create_Subnet:resourceDDL"
                        listener="#{a_Subnet.setResourceToDropDownList(a_Subnet.selectedArea)}"/> 
            </p:selectOneMenu>

            <h:outputText id="create_Subnet_OT" value="IP Address :" />
            <p:selectOneMenu id="resourceDDL" value="#{a_Subnet.selectedResource}" required="true">  
                <f:selectItem itemLabel="Select resource" itemValue="A" />
                <f:selectItems value="#{a_Subnet.resourceList}" />
            </p:selectOneMenu>

            <h:outputText id="netmask_OT" value="netmask :"  />
            <p:inputText id="netmask_IT"  required="true" value="#{a_Subnet.netmask}"/>

            <h:outputText id="description_OT" value="Description :" />
            <p:inputTextarea id="description_ITA" required="true" value="#{a_Subnet.description}"/>

            <p:commandButton id="create_Subnet_Btn" value="Create"  action="#{a_Subnet.test}" />

        </h:panelGrid>
    </h:form>
</p:tab>

これは、出力をチェックするためにajaxで使用される方法です。

public void test(){
    System.out.println("hjhjjh");
    System.err.println( "Area = "+selectedArea);
    System.err.println("Resource = "+selectedResource);
    System.err.println("SNetmask = "+netmask);
    System.err.println("Description = "+description);

}
4

1 に答える 1

1

同じページでajax操作を処理する場合、ブラウザウィンドウ/タブ(Communicationから)で同じJSFビューを操作している限り、このスコープのBeanは存続するため、管理対象Beanには少なくとも@ViewScopedアノテーションを付けることをお勧めします。 JSF 2:マネージドBeanスコープ)。

CDIアノテーション(のような@Named)を使用している場合、アノテーションはありません@ViewScoped。CDIで使用できるようにするには、MyFacesCODIを追加する必要があります。

追加の推奨事項として、 getterは複数回呼び出されるため、getter/setterメソッド内にビジネスロジックサーバーを記述しないでください。

于 2013-03-06T14:27:03.053 に答える