开发者

JSF Dynamic Rendered Component's Value becomes null when the form is submitted

I have a JSF page which renders a text field depending on the value of a drop down using primefaces ajax listner. The dynamic rendering is done fine. but the problem is once I submit the form the the bound value of that textfield doesn't ge开发者_运维技巧t bound instead it is shown as null.

this is the part of my JSF only the necessary fields are included here

<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>    

this is my managed 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;
}
}

i haven't included the dropdown code of the backing bean. i just need an idea of what i am doing wrong here if i remove the rendered attribute of the textfield it works fine.

thank you


Put the bean in the view scope instead of request scope. A request scoped is recreated on every single HTTP request. The boolean property will default to false again whenever you submit the form, so the submitted value won't be processed then.

@ManagedBean
@ViewScoped
public class WorkFlowSelectionController {
    //
}

A view scoped bean will live as long as you're (ajax-) interacting with the same view by returning null or void from action(listener) methods.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜