挂毯:java.lang.NullPointerException 在 org.apache.tapestry5.internal.util.SelectModelRenderer.option(SelectModelRenderer.java:49)

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

我想使用 OptionGroupModel 和 OptionModel 在挂毯中实现 groupListing。 SelectModelImpl 出现空指针错误。 我不知道我哪里出了问题。另一个问题是,当我设法使用另一种方式在组中显示它们时,selected 模型在 deselected 时刷新页面,同时保持未selected.

<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;
}

请在我出错的地方帮助我。我想要实现的是当 select 项目时,我也应该 return 它们到可用列表。

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

在 javascript 文件中创建了组