ice:selectOneMenu是一個(gè)下拉框列表,可以單選一個(gè)值。這個(gè)tag還是有點(diǎn)復(fù)雜,官方文檔也不是很仔細(xì),浪費(fèi)了我不少時(shí)間。下面是例子代碼:
配合f:selectItem,我們可以靜態(tài)的提供下拉列表中的候選值。這里要注意的是,valueChangeListener事件的處罰必須要加上partialSubmit="true"這個(gè)條件。這是文檔中沒有描述的。immediate="true"是無效的。
現(xiàn)在我們看看動(dòng)態(tài)產(chǎn)生下拉列表值的例子:
這里TestBean.values對(duì)應(yīng)的是SelectItem[],代碼如下:
public class TestBean {
/** Creates a new instance of TestBean */
public TestBean() {
values=new SelectItem[2];
values[0]=new SelectItem();
values[0].setLabel("A1");
values[0].setValue(1);
values[1]=new SelectItem();
values[1].setLabel("A2");
values[1].setValue(2);
}
private SelectItem[] values;
/**
* @return the values
*/
public SelectItem[] getValues() {
return values;
}
...
在我的其他應(yīng)用程序中,List也是可以使用的,但是很奇怪,在這個(gè)測(cè)試工程里總是報(bào)錯(cuò)。姑且認(rèn)為是icefaces1.8.1的一個(gè)bug吧。
總是要使用partialSubmit="true"才能讓ValueChangeEvent事件生效,在某些場(chǎng)合是有限制的。比如,如果你在前面增加一個(gè)ice:inputText來輸入姓名,不要指望在ValueChangeEvent事件處理函數(shù)中得到這個(gè)值,因?yàn)椴糠痔峤皇遣粫?huì)將Form中的其他值提交到服務(wù)端的。解決方案有兩個(gè),一個(gè)是在新增的ice:inputText中也應(yīng)用partialSubmit="true"屬性,這樣當(dāng)輸入完畢,焦點(diǎn)從ice:inputText中移出的時(shí)候,setXX方法就可以被調(diào)用,然后ValueChangeEvent事件處理函數(shù)就可以使用輸入值。還有一種方案就是增加javaScript調(diào)用,造成整個(gè)form提交。下面是第一種方法的代碼:
public void changeValue(ValueChangeEvent event){
result=name;
}
private String name;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
private String result;
/**
* @return the result
*/
public String getResult() {
return result;
}
/**
* @param result the result to set
*/
public void setResult(String result) {
this.result = result;
}
如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會(huì)為你解答?。?點(diǎn)擊進(jìn)入論壇