设置两个p:selectOneMenu

时间:2013-03-06 05:23:45

标签: java jsf primefaces

我需要在我的网页上使用两个primefaces selectonmenus。

  1. 我的第二个选择菜单在有静态数据时有效,按下按钮后所有数据都可以在按钮点击中查看

  2. 但是在使用ajax数据加载到此selectonmenu之后从第一个selectonmenu中选择一个值后,动态数据数据无法加载到此,但是在从此

    <中选择一个值后它始终显示空值/ LI>

    这是第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);
    
    }
    

1 个答案:

答案 0 :(得分:1)

当您在同一页面中处理ajax操作时,建议您的托管bean至少具有@ViewScoped注释,因为此范围内的bean只要您与其相互作用就会存在浏览器窗口/选项卡中的JSF视图(来自Communication in JSF 2: Managed Bean Scopes)。

如果您正在使用CDI注释(例如@Named),那么您将不会拥有@ViewScoped注释。为了使其可用于CDI,您应添加MyFaces CODI

作为附加建议,不要在getters get called multiple times之后的getters / setters方法中编写业务逻辑服务器。