Можно ли проверить равенство перечислений в JSF?
например. где stuff
- enum Stuff
:
<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
Можно ли проверить равенство перечислений в JSF?
например. где stuff
- enum Stuff
:
<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
На самом деле это больше связано с 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}" />
Если у вас есть перечисление
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
и не удалось.
Вы можете определить методы тестирования в перечислении, см. следующий источник.
Определение 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}"/>