У меня есть rich:select
, который похож на h:selectOneMenu
, и я использую selectItems
, чтобы заполнить раскрывающееся меню из файла свойств (используя ResourceBundle
).Вот проблема, после заполнения раскрывающегося меню со значениями из файла свойств, и я пытаюсь отправить форму, я получаю report_form:overtime_dropdown: Validation Error: Value is not valid
, и меню очищается.Хорошо, я знаю, что это значит, но интересная часть приходит, когда я снова выбираю что-то из меню и отправляю это.Затем форма отправляется .. странно!?!Если я использую ключи из файла свойств, чтобы заполнить раскрывающийся список, все работает отлично с первого раза.Я публикую нижеприведенный код.
report.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j">
<h:head>
<link rel="stylesheet" type="text/css" href="resources/css/ticket_style.css" />
</h:head>
<h:body>
<rich:panel header="#{lang.reportPanelHeader}" id="panel">
<h:form id="report_form">
<span class="label">
<h:outputText value="#{lang.overtimeLabel}" />
</span>
<span class="input">
<h:selectBooleanCheckbox value="#{validateReportAction.enabled}">
<f:ajax render="@this overtime_dropdown"/>
</h:selectBooleanCheckbox>
</span>
<br />
<br />
<rich:select styleClass="overtime" enableManualInput="false"
defaultLabel="#{lang.defaultOvertimeLabel}"
disabled="#{!validateReportAction.enabled}"
id="overtime_dropdown"
value="#{validateReportAction.selectedOvertime}">
<f:selectItems value="#{validateReportAction.timeSpentList}" />
</rich:select>
<br />
<br />
<br />
<h:commandButton value="#{lang.submitLabel}"/>
</h:form>
</rich:panel>
</h:body>
</html>
Метод с заполнением getTimeSpentList () в классе ValidateReportAction
public List<SelectItem> getTimeSpentList() {
System.out.println("################################################# Test " + test++);
timeSpentList = new ArrayList<SelectItem>();
FacesContext context = FacesContext.getCurrentInstance();
ResourceBundle bundle = ResourceBundle.getBundle("properties.time_intervals", context.getViewRoot().getLocale());
Enumeration<String> time_interval_keys = bundle.getKeys();
List<String> sortedValues = new ArrayList<String>();
opositeOfProperties = new Hashtable<String, String>();
while(time_interval_keys.hasMoreElements()) {
String key = time_interval_keys.nextElement();
String value = bundle.getString(key);
System.out.println("Key: " + key + ", Value: " + value);
opositeOfProperties.put(value, key);
sortedValues.add(value);
// sortedValues.add(key);
}
Collections.sort(sortedValues, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.charAt(1) != ' ') {
return -1;
} else if (o2.charAt(1) != ' ') {
return 1;
}
return o1.compareTo(o2);
}
});
for (String value : sortedValues) {
timeSpentList.add(new SelectItem(value));
}
if (timeSpentList == null || timeSpentList.isEmpty()) {
timeSpentList.add(new SelectItem(""));
return timeSpentList;
}
return timeSpentList;
}
}