Я хочу создать раскрывающийся список selectOneMenu, чтобы я мог выбрать статус своего вопроса. Можно ли сделать f: selectItem более гибким с учетом того, что произойдет, если порядок перечислений изменится, и если список будет большим? Могу ли я сделать это лучше? И можно ли автоматически «выбрать» тот пункт, который есть в вопросе?
Enum класс
public enum Status {
SUBMITTED,
REJECTED,
APPROVED
}
Сущность вопроса
@Enumerated(EnumType.STRING)
private Status status;
JSF
<div class="field">
<h:outputLabel for="questionStatus" value="Status" />
<h:selectOneMenu id="questionStatus" value="#{bean.question.status}" >
<f:selectItem itemLabel="Submitted" itemValue="0" />
<f:selectItem itemLabel="Rejected" itemValue="1" />
<f:selectItem itemLabel="Approved" itemValue="2" />
</h:selectOneMenu>
<hr />
</div>
источник
#{bean.question.status}
имеет допустимое значение перечисления. Вам не нужно делать что-либо, кроме того, чтобыquestion
убедиться, что свойство status предварительно заполнено.+= status
, попробуйте использовать,.concat(status)
как предлагает @Ziletka.Для локализации мы также можем использовать это решение:
Таким образом, путь к ресурсам для строк локализации жестко не задан в Enum.
источник
<c:set>
или<ui:param>
или доморощенный пользовательскую функцию EL.Вы можете использовать
<f:selectItems value="#{carBean.carList}" />
и вернуть списокSelectItem
экземпляров, которые обертывают перечисление (используйтеStatus.values()
для получения всех возможных значений).источник
Вы можете использовать следующую служебную функцию el, чтобы получить значения перечисления и использовать их,
SelectOneMenu
например, в. Нет необходимости создавать бины и стандартные методы.Зарегистрируйте его как функцию el в файле taglib:
И, наконец, назовите это так:
Подобно ответу BalusC, вы должны использовать пакет ресурсов с локализованными метками перечисления, а для более чистого кода вы также можете создать такую функцию, как
getEnumLabel(enum)
источник
#{myBundle[enumName.i18nKey]}
а затем поместить ключи i18n в свое перечисление как свойства:BLA_TYPE("SOME_BLA_TYPE_KEY")
byBLA_TYPE
- это используемое перечисление, аSOME_BLA_TYPE_KEY
это ключ i18n.