2011-08-30 22 views
1

我有一個JSF頁面,它使用primefaces ajax listner根據下拉的值呈現文本字段。動態渲染很好。但問題是我提交表單時,該文本字段的綁定值沒有被綁定,而是顯示爲空。當提交表單時,JSF動態呈現組件的值變爲空

這是我的JSF只有必要的字段都在這裏

<h:panelGroup id="textPanel" > 
<h:form id="main" prependId="false"> 
<h:outputText value="WorkFlow ID:" /> 
<h:selectOneMenu id="workFlows" value="#{workFlowSelectionController.selectedWorkFlowId}" > 
<p:ajax event="change" listener="#{workFlowSelectionController.dropDownChange}" update="textPanel"/> 
<f:selectItems value="#{workFlowSelectionController.allActiveworkFlows}"/> 
</h:selectOneMenu> 
<p:inputText value="#{workFlowSelectionController.texField}" rendered="#{workFlowSelectionController.textfieldVisibility}"/> 
<p:commandButton ajax="false" value="Next" action="#{workFlowSelectionController.addWorkFlowselectionDetails}"/> 
</h:form> 
</h:panelGroup>  

包括這部分是我的託管bean

@ManagedBean 
@RequestScoped 
public class WorkFlowSelectionController { 
private boolean textfieldVisibility = false; 
private String texField; 

public void dropDownChange() { 
    logger.info("WorkFlowSelectionController.dropDownChange() entered"); 



    if (selectedWorkFlowId != null) { 

     if (selectedWorkFlowId.equals("-1")) { 
      textfieldVisibility = true; 
      operationListStatus = false; 


     } else { 
      textfieldVisibility = false; 
      operationListStatus = true; 

     } 
    } else { 
     textfieldVisibility = false; 
     operationListStatus = true; 

    } 
public void addWorkFlowselectionDetails() throws CloneNotSupportedException { 



    System.out.println("Selected Value of Text Field is" + texField); 


} 
public String getTexField() { 
    return texField; 
} 

public void setTexField(String texField) { 
    this.texField = texField; 
} 
} 

我還沒有包括支持bean的下拉代碼。我只需要知道我在做什麼錯誤,如果我刪除文本字段的呈現屬性它工作正常。

謝謝

回答

2

將bean放入視圖範圍而不是請求範圍。每個HTTP請求都會重新創建一個請求作用域。無論何時提交表單,布爾屬性都將默認爲false,因此提交的值將不會被處理。

@ManagedBean 
@ViewScoped 
public class WorkFlowSelectionController { 
    // 
} 

視圖作用域只要你(ajax-)由動作返回nullvoid(聽衆)方法具有相同的觀點互動豆將生活。

+0

如果'p:commandButton'不是ajax,即'ajax =「false」'應該比'@ RequestScope'中的要多嗎? – Sarz