在我的应用程序中,组件必须动态更改.我有一个数据表,因为我有两列,首先是<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)
我的建议是:不要动态添加/删除组件.以另一种方式解决您的问题:
动态添加/删除组件始终是一个麻烦的来源,您可以通过另一种方式更简单地执行此操作.
在您的情况下,使用可见性使用rendered
属性应该足够了.