在JSF中动态添加组件?

时间:2010-02-19 11:23:08

标签: 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}" />

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;
}
}

2 个答案:

答案 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将被渲染,输入将不会,反之亦然。