在我的应用程序中,组件必须动态更改。我有一个数据表,其中我有两列,首先是<h:selectoneMenu>菜单中的a我有两个数据(数据分别为1和2),如果选择了1,<h:inputText>则应出现a,如果选择了2,<h:selectoneMenu>则应出现。需要帮助吗?
<h:selectoneMenu>
<h:inputText>
我的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}" />
我的豆类
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; } }
我的建议是:不要动态添加/删除组件。用另一种方法解决您的问题:
动态添加/删除组件始终是麻烦的源头,而且您有可能以另一种简单得多的方式执行此操作。
在您的情况下,使用可见性using rendered属性就足够了。
rendered