簡體   English   中英

在JSF中動態添加組件?

[英]Dynamically add the component in 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}" />

我的豆類

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

我的建議是:不要動態添加/刪除組件。 用另一種方法解決您的問題:

  • 切換組件的可見性
  • 重新綁定屬於組件的數據

動態添加/刪除組件始終是麻煩的源頭,而且您有可能以另一種簡單得多的方式執行此操作。

在您的情況下,使用rendered屬性來rendered可見性就足夠了。

假設您有這樣的事情

<h:selectoneMenu id="selectOne" rendered="#{myBean.selectOneRendered}">
<h:inputText id="input" rendered="#{!myBean.selectOneRendered}">

您在jsp頁面中同時擁有這兩個組件。 重新加載jsp后,將檢查渲染的屬性。

在您的myBean中,您必須具有這樣的內容

public boolean isSelectOneRendered(){
 boolean rendered;
 //Do something here
 return rendered;
}

如果結果為true,則將呈現selectOne,而不會呈現輸入,反之亦然。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM