При отправке формы значение динамического рендеринга компонента JSF становится нулевым - PullRequest
1 голос
/ 30 августа 2011

У меня есть страница JSF, которая отображает текстовое поле в зависимости от значения раскрывающегося списка с использованием простого лица ajax listner. Динамический рендеринг сделан нормально. но проблема в том, что когда я отправляю форму, связанное значение этого текстового поля не связывается, а отображается как ноль.

это часть моего 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>    

это мой управляемый боб

@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;
}
}

Я не включил выпадающий код компонента поддержки. Мне просто нужно понять, что я делаю неправильно, если я удалю визуализированный атрибут текстового поля, он работает нормально.

спасибо

1 Ответ

2 голосов
/ 30 августа 2011

Поместите компонент в область просмотра вместо области запроса.Объем запроса воссоздается при каждом HTTP-запросе.Логическое свойство по умолчанию снова будет иметь значение false, когда вы отправляете форму, поэтому отправленное значение не будет обрабатываться.

@ManagedBean
@ViewScoped
public class WorkFlowSelectionController {
    //
}

Бин с областью видимости будет жить так же долго, как и вы (ajax-)взаимодействуя с одним и тем же представлением, возвращая null или void из методов действия (слушателя).

...