<a jsf:rendered="# enj...‹"> не интерпретируется как проходной элемент

Я не понимаю, почему этот кусок кода работает:

<h:link value="Login" rendered="#{sessionBean.userInSessionBean == null}"  />

и этот кусок кода не работает:

<a jsf:rendered="#{sessionBean.userInSessionBean == null}">Login</a>

1 ответ

Решение

Элемент HTML станет промежуточным элементом только при соблюдении следующих условий:

  1. Там как минимум один jsf:xxx атрибут из http://xmlns.jcp.org/jsf Пространство имен.
  2. По крайней мере, один " атрибут идентификации " связан с конкретным компонентом JSF.

Для <a> элемент должен идентифицировать атрибут, чтобы JSF мог решить, следует ли его интерпретировать как <h:commandLink>, <h:outputLink> или же <h:link>, Без идентифицирующего атрибута JSF не знал бы, какой компонент вы на самом деле хотели использовать, поэтому любой jsf:xxx атрибуты будут игнорироваться. jsf:rendered недостаточно в качестве идентифицирующего атрибута, потому что он появляется в каждом отдельном компоненте JSF, поэтому JSF все равно не знает, какой именно вы имели в виду.

Учитывая, что вы, кажется, намереваетесь иметь <h:link> затем используйте jsf:outcome в качестве идентифицирующего атрибута.

<a jsf:outcome="login" jsf:rendered="#{empty sessionBean.userInSessionBean}">Login</a>

Совершенно другая альтернатива заключается в том, чтобы заключить простой HTML в <ui:fragment rendered>, Смотрите также Как условно отобразить простые элементы HTML, такие как

Другие вопросы по тегам