【问题标题】:Setting two p:selectOneMenu s设置两个 p:selectOneMenu
【发布时间】:2013-03-06 05:23:44
【问题描述】:

我需要在我的网页上使用两个 primefaces 选择菜单。

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

  2. 但它不适用于动态数据数据在使用 ajax 数据加载到此选择菜单后从第一个选择菜单中选择一个值后加载到此选择菜单,但在从中选择一个值后它总是显示空值

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

}

【问题讨论】:

  • 确保您的 a_Subnet 托管 bean 至少为 @ViewScoped
  • 托管 bean 类在 "@requestScope" 中,将其更改为 "@ViewScoped" 没有发生
  • 如果您使用的是 javax.faces 包注释,请将其更改为 @ViewScoped。如果您使用 CDI,则应使用 @SessionScoped 设置它们或从 MyFaces CODI 获取 @ViewScoped
  • 成功了,谢谢.....

标签: java jsf primefaces


【解决方案1】:

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

如果您使用的是 CDI 注释(如 @Named),那么您将没有 @ViewScoped 注释。为了使其可用于 CDI,您应该添加 MyFaces CODI

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

【讨论】:

    猜你喜欢
    • 2015-11-24
    • 2013-10-10
    • 2020-06-08
    • 2012-10-30
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多