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

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

Например, где stuff enum Stuff:

<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
49
задан BalusC 24 April 2012 в 08:37
поделиться

2 ответа

На самом деле это больше связано с 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 type="com.example.Stuff" />
...
<h:outputText value="text" rendered="#{mrBean.stuff == Stuff.FOO}" />
94
ответ дан 7 November 2019 в 11:25
поделиться

Если у вас есть enum

public enum Status {
    YES, NO
}

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

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

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

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

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

37
ответ дан 7 November 2019 в 11:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: