提交表单时,JSF 动态呈现组件的值变为空



我有一个JSF页面,它使用primefaces ajax侦听器根据下拉列表的值呈现文本字段。动态渲染做得很好。但问题是,一旦我提交的形式,该文本域的绑定值没有得到绑定,而是显示为空。

这是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的下拉代码。我只需要一个想法,我在这里做错了,如果我删除文本字段的渲染属性,它工作得很好。

谢谢

将bean放在视图作用域中而不是请求作用域中。在每个HTTP请求上重新创建一个请求范围。当你提交表单时,布尔属性将再次默认为false,因此提交的值将不会被处理。

@ManagedBean
@ViewScoped
public class WorkFlowSelectionController {
    //
}

只要您(ajax-)通过从操作(侦听器)方法返回nullvoid与相同的视图交互,视图作用域bean就会存在。

相关内容

  • 没有找到相关文章

最新更新