2013-08-29 22 views
0

我遇到了由PrimeFaces 3.5上的booleanButtom呈现的表单的问题 表单按预期方式出现,但是当我将该字段的值提交为空时。 的PAG的代码:`在primefaces上呈现的表单没有调用管理bean

<p:panelGrid> 
    <p:row> 
      <p:column> 
       <h:form id="city"> 
        <p:panelGrid columns="2"> 
         <h:outputText value="Name: "/> 
         <p:inputText label="Name" value="#{managedBean.city.name}"/> 

         <h:outputText value="Status: "/> 
         <p:selectBooleanButton value="#{managedBean.city.status}" onLabel="Enable" offLabel="Disable"> 
            <p:ajax listener="#{managedBean.changeStatusCity()}"/> 
         </p:selectBooleanButton> 

         <h:outputText value="Add neighborhood?"/> 
         <p:selectBooleanButton id="btAddNeighborhood" value="#{managedBean.addNeighborCity}" onLabel="Cancel" offLabel="Yes"> 
           <p:ajax update=":addNeighbor" listener="#{managedBean.addNeighborCity()}"/> 
         </p:selectBooleanButton> 
        </p:panelGrid> 
       </h:form> 
     </p:column> 
    </p:row> 

    <p:row> 
      <p:column> 
       <h:form id="addNeighbor"> 
        <p:panel header="Neighborhood" rendered="#{managedBean.addNeighborCity}"> 
         <p:panelGrid columns="2"> 
           <h:outputText value="Name: "/> 
           <p:inputText label="Name" value="#{managedBean.neighborhood.name}"/> 
           <h:outputText value="Status: "/> 
           <p:selectBooleanButton value="#{managedBean.neighborhood.status}" onLabel="Enable" offLabel="Disable" onIcon="ui-icon-check" offIcon="ui-icon-close"> 
            <p:ajax listener="#{managedBean.changeStatusNeighbor()}"/> 
           </p:selectBooleanButton> 
         </p:panelGrid> 
        </p:panel> 
       </h:form> 

       <h:form id="formBt"> 
         <p:commandButton id="bt" value="Add" actionListener="#{managedBean.saveNeighborCity()}" update=":addNeighbor, :city:btAddNeighborhood"/> 
       </h:form> 
      </p:column> 
    </p:row> 
</p:panelGrid>` 

而且管理豆

public void addNeighborCity(){ 
    if(addNeighborCity){ 
     neighborhood = new Neighborhood(); 
     neighborhood .setStatus(true); 
     neighborhood .setStringStatus("Enable"); 
    }else{ 
     neighborhood = null; 
    } 
} 

public void changeStatusNeighbor() { 
    if (neighborhood .isStatus()) { 
     neighborhood .setStringStatus("Enable"); 
    } else { 
     neighborhood .setStringStatus("Disable"); 
    } 
} 

public void saveNeighborCity(){ 
     city.getNeighborhoods().add(neighborhood); 
     neighborhood = null; 
     addNeighborCity = false; 
} 

所有这一切都呈现形式的内部的输入不发送信息到管理bean的,当我把添加邻居到城市列表的按钮停止工作,不再调用管理bean。 有人知道我在做什么错或发生了什么。我正在使用Primefaces3.5,GlassFish4.0和JSF2.2

+0

症状对于特定用途的bean而言是典型的,它被错误地放在请求范围内而不是视图范围内。只是为了排除明显的,这是真的吗?否则,这个问题更有可能归功于PrimeFaces 3.5和JSF 2.2的组合。 – BalusC

回答

0

因为你没有发布整个托管bean,我猜你正在使用托管bean的默认范围:@RequestScoped。在这种情况下,您应该使用@ViewScoped

0

我解决了这个问题,我使用的是glassfish 4,即使您将jsf2.1放入我们的项目中,也会强制使用jsf2.2,然后我更改为glassfish 3,所有工作都很好,谢谢您的答案,我正在使用@ScopeSession。