Tapestry:org.apache.tapestry5.internal.util.SelectModelRenderer.option(SelectModelRenderer.java:49)中的java.lang.NullPointerException

时间:2016-03-22 14:22:20

标签: tapestry

我想使用OptionGroupModel和OptionModel在tapestry中实现groupListing。我用SelectModelImpl得到一个NULL指针错误。 我不知道我错在哪里。另一个问题是,当我设法使用其他方式在组中显示它们时,取消选择时所选模型会刷新页面,同时保持未选中状态。

<div t:type="ck/Tooltip" title="${message:savedCriteria.ttpTitle}" value="${message:savedCriteria.ttpValue}" effect="appear">
    <t:select t:id="SavedCriteria"  validate="required" model="savedCriteria" value="prop:currentCriteria" t:mixins="OnSelectChangeActionLink"      optionModels="savedCriteria.options" selectChangeEncoder="singleValueEncoder" />
</div>

获取配方奶粉的代码如下:

public SelectModel getFormulas()  throws Exception {
    //return new SelectModelImpl(createOptionGroups(getFormulaList(), getFormulaLabelList()), null);
    //return new SelectModelImpl(selectService.getFormulaGroupByWhereClause("T_FORMULALIST", "ID", "FORMULANAME", "LOCALEPARENT", LanguageQueries.getLanguageByCode(getUserLanguage()), "showInAnalyzer", true, this.listFormulas), null);

    return new AbstractSelectModel() {

        private List<OptionGroupModel> groupModels = null;

        public List<OptionModel> getOptions() {
            return null;
        }

        public List<OptionGroupModel> getOptionGroups() {
            if (groupModels == null) {
                computeModel();
            }
            return groupModels;
        }

        private void computeModel() {
            groupModels = createOptionGroups(getFormulaList(), getFormulaLabelList());
        }
    };
}

private List<OptionGroupModel> createOptionGroups(LinkedHashMap<String, Integer> formulaList, LinkedHashMap<String, String> formulaLabelList)
{
    final List<OptionGroupModel> optGroupList = new ArrayList<OptionGroupModel>();
    for (Iterator<?> iterator = formulaLabelList.keySet().iterator(); iterator.hasNext(); ) {
        String key = (String) iterator.next();
        String group = formulaLabelList.get(key);
        List<OptionModel> optList = new ArrayList<OptionModel>();
        for (Iterator<?> i = formulaList.keySet().iterator(); i.hasNext(); ) {
            String optionKey = (String) i.next();
            Integer option = formulaList.get(optionKey);
            String optionCompare = formulaList.get(optionKey).toString();
            if(key.equalsIgnoreCase("Uncategorized") && option == null){
                optList.add(new OptionModelImpl(optionKey, option));
            } else if((optionCompare.contains(group)) && !(optionKey.contains("*"))) {
                optList.add(new OptionModelImpl(optionKey, option));
            }
        }
        if(optList.size() > 0) {
            OptionGroupModel groupModel = new OptionGroupModelImpl(key, false, optList);
            optGroupList.add(groupModel);
        }
    }
    return optGroupList;
}

请在我出错的地方协助我。我想要实现的是当选择项目时,我也应该将它们返回到可用列表。

1 个答案:

答案 0 :(得分:0)

我通过创建一个javascript文件来解决这个问题,该文件将结果移动到选定的一边,反之亦然,我还使用标记

在javascript文件中创建组