2015-02-26 4 views
0

У меня есть страница JSF с selectOneMenu и inputText.Rendered Attibute не работает

В поле selectOneMenu выбран параметр inputText с некоторой опцией.

Вот код JSF:

 <span> 
      <h:selectOneMenu id="select" value="#{myBean.model.selectValue}" > 
       <f:selectItem itemValue="1" itemLabel="1" /> 
       <f:selectItem itemValue="2" itemLabel="2" /> 
       <f:selectItem itemValue="3" itemLabel="3" /> 
       <f:ajax listener="#{myBean.showInput}" render="input" /> 
      </h:selectOneMenu> 
     </span> 
     <span> 
      <h:inputText id="input" value="#{myBean.model.inputValue}" rendered="#{myBean.input}"/> 
     </span> 

Вот MyBean код:

@ManagedBean(name = "myBean") 
public class MyBean { 

    public class Model { 

     private String selectValue = ""; 
     private String inputValue = ""; 

     public String getInputValue() { 
      return inputValue; 
     } 

     public void setInputValue(String inputValue) { 
      this.inputValue = inputValue; 
     } 

     public String getSelectValue() { 
      return selectValue; 
     } 

     public void setSelectValue(String selectValue) { 
      this.selectValue = selectValue; 
     } 
    } 

    private Model model = new Model(); 
    private boolean input = false; 

    public Model getModel() { 
     return model; 
    } 

    public void setModel(Model model) { 
     this.model = model; 
    } 

    public boolean isInput() { 
     return input; 
    } 

    public void setInput(boolean input) { 
     this.input = input; 
    } 

    public void showInput() { 
     this.input = "3".equals(model.getSelectValue()); 
    } 

} 

Но ввод не показывается. Независимо от того, что выбрано на selectOneMenu.

Что мне не хватает?

ответ

1

#{myBean.input} изначально ошибочный, поэтому компонент не отображается при загрузке страницы. Вам нужно настроить таргетинг на родительский контейнер h:inputText с f:ajax, поскольку после визуализируемого атрибута false этот текст ввода больше не находится в дереве компонентов и не может быть повторно отображен. Попробуйте это

<span> 
     <h:selectOneMenu id="select" value="#{myBean.model.selectValue}" > 
      <f:selectItem itemValue="1" itemLabel="1" /> 
      <f:selectItem itemValue="2" itemLabel="2" /> 
      <f:selectItem itemValue="3" itemLabel="3" /> 
      <f:ajax listener="#{myBean.showInput}" render="wrapper" /> 
     </h:selectOneMenu> 
    </span> 
    <span> 
     <h:panelGroup id="wrapper"> 
      <h:inputText id="input" value="#{myBean.model.inputValue}" rendered="#{myBean.input}"/> 
     </h:panelGroup> 
    </span>