【问题标题】:JSF Dynamic Rendered Component's Value becomes null when the form is submitted提交表单时,JSF 动态渲染组件的值变为空
【发布时间】:2011-08-30 05:04:39
【问题描述】:

我有一个 JSF 页面,它使用 primefaces ajax 列表器根据下拉列表的值呈现一个文本字段。动态渲染完成得很好。但问题是,一旦我提交表单,该文本字段的绑定值不会被绑定,而是显示为 null。

这是我的 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 的下拉代码。如果我删除文本字段的渲染属性,我只需要知道我在这里做错了什么。

谢谢

【问题讨论】:

    标签: jsf dynamic primefaces


    【解决方案1】:

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

    @ManagedBean
    @ViewScoped
    public class WorkFlowSelectionController {
        //
    }
    

    只要您 (ajax-) 通过从 action(listener) 方法返回 nullvoid 与同一个视图交互,视图范围的 bean 就会存在。

    【讨论】:

    • 如果 p:commandButton 不是 ajax 即 ajax="false" 而不是 @RequestScope
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 2015-04-10
    • 2017-04-15
    相关资源
    最近更新 更多