在我的应用程序中,组件必须动态更改。我有一个数据表,因为我有两列,首先是菜单中的<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}" />
My Manged Bean Class
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;
}
}
答案 0 :(得分:5)
我的建议是:不要动态添加/删除组件。用另一种方式解决你的问题:
动态添加/删除组件始终是一个麻烦的来源,而且你可以用另一种方式更简单地做到这一点。
在您的情况下,使用rendered
属性播放可见性应该足够了。
答案 1 :(得分:2)
假设你有类似的东西
<h:selectoneMenu id="selectOne" rendered="#{myBean.selectOneRendered}">
<h:inputText id="input" rendered="#{!myBean.selectOneRendered}">
你的jsp页面中有两个组件。重新加载jsp后,将检查渲染的prorpertie。
在你的myBean中你必须有这样的东西
public boolean isSelectOneRendered(){
boolean rendered;
//Do something here
return rendered;
}
如果结果为true,那么selectOne将被渲染,输入将不会,反之亦然。