【发布时间】:2016-06-22 16:37:24
【问题描述】:
我正在尝试使用 Primefaces“SelectOneMenu”,其中包含可以具有“普通”标签或“粗体”标签的项目。我尝试了 2 种不同的变体,但都没有按预期工作。
变体 1:
<p:selectOneMenu id="menu" value="#{selected}">
<f:selectItems value="#{mySelectItems}"/>
</p:selectOneMenu>
public List<SelectItem> getMySelectItems() {
List<SelectItem> list = new ArrayList<SelectItem>();
for (...) {
SelectItem item = new SelectItem(value, label);
item.setEscape(false);
if (...)
item.setLabel("<b>" + item.getLabel() + "</b>");
list.add(item);
}
return list;
}
这样我可以让菜单中的一些项目带有粗体标签,而有些则带有普通标签。问题:显示当前选择的字段将文本显示为“...”。文本似乎没有被转义,但它似乎不能显示为粗体,因为它位于 HTML 标签内。不过,我不知道如何才能去掉那个标签中的“”和“”。
变体 2:
<p:selectOneMenu id="menu" value="#{selected}" var="myClass">
<f:selectItems value="#{myClasses}"/>
<p:column>
<h:outputText value="#{myClass.name}" styleClass="bold"/>
</p:column>
</p:selectOneMenu>
public List<MyClass> getMyClasses() {
List<MyClass> list = new ArrayList<MyClass>();
...
return list;
}
使用这个变体,我还可以在菜单中为项目(目前是所有项目)添加粗体标签。问题是:显示当前选择的文本没有显示“myClass.getName()”,而是显示“myClass.toString()。菜单中的标签是正确的。有没有办法解决这个问题?
如果我写...
<f:selectItems value="#{myClasses}" var="myVar" itemValue="#{myVar.value}" itemLabel="#{myVar.name}"/>
相反,它不再将菜单中的项目显示为粗体,而是在当前选择的字段中使用 getName() 而不是 toString()。
有谁知道如何让我的想法按照我希望的方式发挥作用,或者对如何解决这个问题有更好的想法?
提前致谢!
【问题讨论】:
标签: jsf primefaces selectonemenu