Как проверить на равенство в JSF? - PullRequest
48 голосов
/ 26 марта 2010

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

например. где stuff является enum Stuff:

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

Ответы [ 3 ]

94 голосов
/ 26 марта 2010

На самом деле это больше связано с 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 вы не можете получить прямой доступ к значениям перечисления следующим образом:

<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}" />
37 голосов
/ 27 марта 2010

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

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 и завершится неудачей.

2 голосов
/ 09 июня 2015

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

Определение перечисления:

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}"/>
...