I don't understand why this piece of code is working:
<h:link value="Login" rendered="#{sessionBean.userInSessionBean == null}" />
and this piece of code is not working:
<a jsf:rendered="#{sessionBean.userInSessionBean == null}">Login</a>
答案 0 :(得分:8)
如果符合以下条件,HTML元素将只会成为直通元素:
http://xmlns.jcp.org/jsf
命名空间中至少有一个jsf:xxx
attribute。对于<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>
完全不同的替代方法是在<ui:fragment rendered>
中包含纯HTML。另请参阅How to conditionally render plain HTML elements like <div>s?