Это шаблон, который я бы использовал снова и снова, если бы заставил его работать.У меня есть имя перечисления Log.LogKey, которое я хочу, чтобы пользователь выбирал экземпляры.Таким образом, у лицевой стороны есть это:
<h:form id="testForm" >
<h:selectManyCheckbox value="#{test.selectedKeys}" >
<f:selectItems value="#{test.allKeys}"
var="lk"
itemLabel="#{lk.display}"
itemValue="#{lk}" />
</h:selectManyCheckbox>
<h:commandButton value="Do It" action="#{test.doNothng}" />
</h:form>
У перечисления есть геттер с именем getDisplay () .Атрибут selectItems вызывает это правильно, потому что это строка, которая отображается для пользователя.И этот компонент имеет:
public class Test implements Serializable {
private List<Log.LogKey> selectedKeys = null;
public List<Log.LogKey> getAllKeys() {
return Arrays.asList(Log.LogKey.values());
}
public List<Log.LogKey> getSelectedKeys() { return selectedKeys; }
public void setSelectedKeys(List selected) {
System.out.println("getSelecgedKeus() got " + selected.size());
int i = 0;
for (Object obj : selected) {
System.out.println(i++ + " is " + obj.getClass() + ":" + obj);
}
}
public String doNothng() { return null; }
}
Таким образом, при отправке формы массив setSelectedKeys (selected) вызывается со списком строк, а неСписок Log.LogKey.Ссылка на # {lk} в теге selectItems преобразует объект в строку.Каков был бы правильный способ сделать это?