目前我正在尝试使用数据库中的值填充h:selectOneListbox
。
我的功能是获取数据findAllCriteria()
public List<String> findAllCriteria() {
try {
List<Criteria> crits = criteriaFacade().findAllByAnmeldename(getCurrentUserName(),
getCriteriaDefinition().getName());
List<String> results = new ArrayList<>();
for (Criteria crit : crits) {
results.add(crit.getId().toString());
}
return results;
} catch (BusinessException e) {
LOG.error("failed to load criteria" + e);
messageFactory().makeAndAdd(e);
return null;
}
}
这个函数我传递给我的转换器criteriaToSelectItems(meldungListController.findAllCriteria())
public static List<SelectItem> criteriaToSelectItems(List<String> elements) {
List<SelectItem> items = new ArrayList<SelectItem>(elements.size());
for (String element : elements) {
items.add(new SelectItem(element, element));
}
return items;
}
如此处所定义:
<function>
<function-name>criteriaToSelectItems</function-name>
<function-class>de.db.udg.diagnose.udgdiag.webui.app.facelets.functions.SelectItemsFunctions</function-class>
<function-signature>java.util.List criteriaToSelectItems(java.util.List)</function-signature>
关键是:
<h:selectOneListbox id="critList" size="1"
value="#{meldungListController.findCriteriaById(identifier)}">
<f:selectItems
value="#{d:criteriaToSelectItems(meldungListController.findAllCriteria())}" />
</h:selectOneListbox>
我不明白如何从所选项目中检索项目(String
)以及如何进一步处理它。
public Criteria findCriteriaById(String identifier) {
if (identifier.isEmpty()) {
return querySpec.getCriteria();
}
Long id = Long.valueOf(identifier);
Criteria criteria;
try {
criteria = criteriaFacade().findById(id);
} catch (BusinessException e) {
LOG.error("failed to load criteria" + e);
messageFactory().makeAndAdd(e);
return null;
}
return criteria;
}
这两个函数都嵌套在@Component("meldungListController")
)
我已阅读this article on SO,但这仅限于JSF 2.x
将我的JSF版本从1.2升级到2.x是没有选择的。
如何在JSF 1.2中动态填充selectOneListbox并找到所选索引的值。
在-深度:
列出所有selectItems的工作原理,参见图片,但是:
javax.el.PropertyNotFoundException: /pages/meldung/meldungList.xhtml @341,72 value="#{meldungListController.findCriteriaById(identifier)}": The class 'de.db.udg.diagnose.udgdiag.webui.meldung.MeldungListController' does not have the property 'findCriteriaById'.
我希望有人能记住JSF 1.2过去的美好时光,并且可以帮助我。