在JSF中动态添加组件?

Har*_*aji 0 java jsf

在我的应用程序中,组件必须动态更改.我有一个数据表,因为我有两列,首先是<h:selectoneMenu>在菜单中我有两个数据(数据是1和2)如果选择1然后<h:inputText>应该出现一个如果选择2则<h:selectoneMenu>应该出现.需要帮助吗?

我的JSF

   <h:selectOneMenu id="menu" value="#{sample.data}" rendered="true" valueChangeListener="#{sample.change}">
    <f:selectItem itemLabel="Data" itemValue=""/>
    <f:selectItems value="#{sample.list1}"/>
            <a4j:support event="onchange" reRender="text" />
</h:selectOneMenu>
<h:inputText id="text" value="#{sample.input}" rendered="#{sample.status}" />
Run Code Online (Sandbox Code Playgroud)

我的Manged Bean类

public class Sample {
private Boolean status;          //Getter & Setter
private List<SelectItem> list1;  //Setter
private String input;            //Getter & Setter
private String data;             //Getter & Setter

public void change(ValueChangeEvent event){
System.out.println((String)event.getNewValue());
if(((String)event.getNewValue()).equals("value1")){
    status=true;
}
else if(((String)event.getNewValue()).equals("value2")){
    status=false;
}
}
public Boolean getStatus(){
if(status==null){
    status=true;
}
return status;
}
public List<SelectItem> getList1() {
if(list1==null) {
list1 = new ArrayList<SelectItem>();
list1.add(new SelectItem("value1", "label1"));
list1.add(new SelectItem("value2", "label2"));
}
return list1;
}
}
Run Code Online (Sandbox Code Playgroud)

ewe*_*nli 5

我的建议是:不要动态添加/删除组件.以另一种方式解决您的问题:

  • 切换组件的可见性
  • 重新绑定属于组件的数据

动态添加/删除组件始终是一个麻烦的来源,您可以通过另一种方式更简单地执行此操作.

在您的情况下,使用可见性使用rendered属性应该足够了.