我想使用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;
}
请在我出错的地方协助我。我想要实现的是当选择项目时,我也应该将它们返回到可用列表。
答案 0 :(得分:0)
我通过创建一个javascript文件来解决这个问题,该文件将结果移动到选定的一边,反之亦然,我还使用标记
在javascript文件中创建组