我面臨h:selectOneMenu組件的奇怪問題。valueChangeListener在初始值爲空時被調用字符串和新值爲空
我在我的JSF 2應用程序中使用h:selectOneMenu。我在我的控制器類中創建了一個數月的Arraylist,它被賦予h:selectOneMenu。下拉菜單的起始元素是「Any」,其值是一個空白字符串。 h:selectOneMenu的值綁定到對象類變量「month」。 變量月初始化爲「」(空字符串)。
我在h:selectOneMenu上創建了一個ValueChangeEvent。我在控制器中寫了一個方法changeMonth(event),它在Value change事件上被調用。
我的問題是,當我單擊提交按鈕時,即使該值未被更改,也會觸發此值更改事件。只有當下拉菜單位於「任何」時纔會發生這種情況。 當我嘗試在changeMonth方法中獲取更改的值時,我將舊值作爲「」(空字符串)並將新值作爲空值。
理想情況下,ValueChangeEvent不應被觸發。但是,由於它從空白變爲空,這種情況正在發生。爲什麼會發生?這是JSF 2 h的問題:selectOneMenu組件?
我貼我的控制器代碼:
@ManagedBean
@SessionScoped
public class Controller {
private List monthList;
private ObjClass searchVO;
public List getMonthList() {
List<SelectItem> list = new ArrayList<SelectItem>();
list.add(new SelectItem("", "Any"));
for (int i = 1; i <= 12; i++) {
list.add(new SelectItem(String.valueOf(i), "Month"+i));
}
monthList = list;
return monthList;
}
/**
* @param monthList
* the monthList to set
*/
public void setMonthList(List monthList) {
this.monthList = monthList;
}
public ObjClass getSearchVO() {
if (searchVO == null) {
searchVO = new ObjClass();
}
return searchVO;
}
public void setSearchVO(ObjClass searchVO) {
this.searchVO = searchVO;
}
public void changeMonth(ValueChangeEvent changeEvent) {
PhaseId phaseId = changeEvent.getPhaseId();
String oldValue = (String) changeEvent.getOldValue();
String newValue = (String) changeEvent.getNewValue();
}
}
這是我的對象類:
public class ObjClass {
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
private String month="";
public ObjClass(String month) {
super();
this.month = month;
}
public ObjClass() {
}
}
這是我的XHTML形式:
<h:form>
Dropdown example:
<h:selectOneMenu valueChangeListener="#{controller.changeMonth}"
onchange="submit();" id="month"
value="#{controller.searchVO.month}" title="Select Month">
<f:selectItems value="#{controller.monthList}" />
</h:selectOneMenu>
<br /><br />
<h:outputText value="#{controller.searchVO.month}"></h:outputText>
<h:commandButton value="Submit" action="result" />
<h:commandButton value="Reset" type="reset" />
</h:form>
嗨塔裏克,那也不行。您能否請您在當地重現準確的代碼並告訴我您觀察到了什麼結果? – Stacklin 2015-02-09 06:00:51
好的,我會在今天晚些時候嘗試它 – Tarik 2015-02-09 07:57:50
試試這個http://stackoverflow.com/a/6306137/4170582 – Tarik 2015-02-09 16:57:35