Я пытаюсь получить «PrimeOneMenu» с элементами, которые могут иметь «нормальную» метку или «жирный» ярлык. Я попробовал 2 разных варианта, но оба они работают не так, как ожидалось.<p: selectOneMenu> с жирным шрифтом для некоторых элементов
Вариант 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;
}
Таким образом, я могу иметь некоторые из пунктов меню с жирной этикеткой и некоторые из них с нормальной этикеткой. Проблема: поле, показывающее текущий выбор, отображает текст как «< b> ... </b>». Текст, похоже, не экранирован, но кажется, что он просто не может быть выделен полужирным шрифтом, потому что он находится внутри метки HTML. Я не знаю, как я мог бы избавиться от «< b>» и «</b>» на этом ярлыке.
Вариант 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() в области текущего выбора.
Кто-нибудь знает, как заставить мои идеи работать так, как я хочу, чтобы они работали, или, может быть, есть лучшая идея о том, как это решить?
Заранее спасибо!