动态填充h:SelectOneListbox

时间:2018-04-17 13:38:00

标签: jsf javabeans el jsf-1.2

目前我正在尝试使用数据库中的值填充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的工作原理,参见图片,但是:

detail

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过去的美好时光,并且可以帮助我。

0 个答案:

没有答案