一尘不染

在JSF中动态添加组件?

java

在我的应用程序中,组件必须动态更改。我有一个数据表,其中我有两列,首先是<h:selectoneMenu>菜单中的a我有两个数据(数据分别为1和2),如果选择了1,<h:inputText>则应出现a,如果选择了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}" />

我的豆类

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

阅读 168

收藏
2020-12-03

共1个答案

一尘不染

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

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

动态添加/删除组件始终是麻烦的源头,而且您有可能以另一种简单得多的方式执行此操作。

在您的情况下,使用可见性using rendered属性就足够了。

2020-12-03