JSF 2.0: пустой оператор не работает с параметром
В файле aPage.xhtml
У меня есть следующие строки:
<ui:include rendered="#{not empty param.target}" src="#{param.target}.html" />
<ui:include rendered="#{empty param.target}" src="About.html" />
С учетом приведенных выше строк, я ожидал, что когда я пойду к http://localhost:8080/beta/aPage.xhtml
, страница About.html
будет включен, так как param.target
является null
, Однако GlassFish бросил мне следующее исключение:
java.io.FileNotFoundException: http://localhost:8080/beta/.html
Так или иначе, param.target
не считался null
,
Кроме того, я пытался использовать ==
а также !=
операторы как следующие:
<ui:include rendered="#{param.target != null}" src="#{param.target}.html" />
<ui:include rendered="#{param.target == null}" src="About.html" />
Интересно, что на этот раз на консоли GlassFish я не увидел ни одного исключения. Однако в браузере по-прежнему появляется страница с ошибкой, за исключением java.io.FileNotFoundException
,
Я был бы очень признателен, если бы вы сказали мне, почему это произошло и что я должен сделать, чтобы избежать этого.
ОБНОВИТЬ:
Благодаря подсказке от Joop Eggen я наконец решил проблему со следующими строками:
<ui:param name="noTarget" value="About.html" />
<ui:param name="hasTarget" value="#{param.target}.html" />
<ui:include src="#{empty param.target? noTarget : hasTarget}" />
С наилучшими пожеланиями
2 ответа
Src оценивается в обоих случаях, может быть, с помощью теста на существование файла? Делать
<ui:include src="#{empty param.target? 'About' : param.target}.html" />
ui:include
не получил rendered
атрибут... обернуть его <h:panelGroup
как это
<h:panelGroup rendered="#{not empty param.target}">
<ui:include src="#{param.target}.html" />
</h:panelGroup>
<h:panelGroup rendered="#{empty param.target}" >
<ui:include src="About.html" />
</h:panelGroup>
редактировать
К сожалению, это будет работать только тогда, когда EL в Src точек правильный путь,
причина
EL в ср
<ui:include>
оценивается во время построения представления, а не во время визуализации представления