У меня возникает странная проблема с h: selectOneMenu.valueChangeListener вызывается, когда начальное значение является пустой строкой, а новое значение равно null
Я использую h: selectOneMenu в своем приложении JSF 2. Я создал Arraylist месяцев в классе контроллера, который присваивается h: selectOneMenu. Начальным элементом выпадающего списка является «Любой», значение которого является пустой строкой. Значение h: selectOneMenu привязывается к переменной класса объекта «месяц». Переменная месяц инициализируется как "" (пустая строка).
Я создал ValueChangeEvent на h: selectOneMenu. Я написал метод changeMonth (событие) в контроллере, который вызывается в событии изменения значения.
Моя проблема заключается в том, что это событие изменения значения срабатывает, когда я нажимаю кнопку отправки, даже если значение не изменяется. Это происходит только тогда, когда выпадающее меню имеет значение «Любой». Когда я попытался получить значения для изменения метода changeMonth, я получаю старое значение как «» (пустая строка), а новое значение равно null.
В идеале не следует запускать 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
Хорошо, я попробую это позже сегодня – Tarik
попробуйте это http://stackoverflow.com/a/6306137/4170582 – Tarik