Подтвердить что ты не робот

Как проверить равенство перечислений в JSF?

Можно ли проверить равенство перечислений в JSF?

например. где stuff - enum Stuff:

<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
4b9b3361

Ответ 1

На самом деле это больше связано с EL, чем с JSF. Конструкция, которую вы опубликовали, действительна, но вы должны иметь в виду, что значения перечисления в EL 2.1 фактически оцениваются как значения String. Если String.valueOf(mrBean.getStuff()) равно String.valueOf(mrsBean.getStuff()), тогда будет показан ваш пример кода. В EL 2.2 ту же конструкцию будет работать, но они оцениваются как истинные перечисления.

Обратите внимание, что это действительно требует, чтобы метод getter возвращал значение перечисления. Учитывая тот факт, что перечисления рассматриваются как String, вы можете по существу также просто:

<h:outputText value="text" rendered="#{mrBean.stuff == 'FOO'}" />

В текущей версии EL 2.2 вы не можете вводить значения enum следующим образом:

<h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" />

Это возможно только при использовании OmniFaces <o:importConstants>:

<o:importConstants type="com.example.Stuff" />
...
<h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" />

Ответ 2

Если у вас есть перечисление

public enum Status {
    YES, NO
}

вы можете ссылаться на перечисления на ваших страницах jsf следующим образом:

<h:outputText value="text" rendered="#{myBean.status == 'YES'}"/>

Я не уверен в оценке String из-за того, что я наткнулся на рефакторинг некоторого кода для использования перечислений: если у вас есть опечатка в вашем статусе String, то есть:

<h:outputText value="text" rendered="#{myBean.status == 'YESSIR'}"/>

вы действительно получите ошибку времени выполнения, когда вы нажмете на страницу, потому что парсер EL попытается принудить YESSIR к переименованию Status и не удалось.

Ответ 3

Вы можете определить методы тестирования в перечислении, см. следующий источник.

Определение enum:

public enum MyEnum {
    FOO;
    public boolean isFoo(){
        return FOO.equals(this);
    }
}

Код JSF:

<h:outputText value="text" rendered="#{mrBean.stuff ne null and mrBean.stuff.foo}"/>