<a jsf:rendered="#{...}"> is not interpreted as passthrough element

时间:2016-02-25 20:47:16

标签: jsf jsf-2.2 rendered-attribute passthrough-elements

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>

1 个答案:

答案 0 :(得分:8)

如果符合以下条件,HTML元素将只会成为直通元素:

  1. http://xmlns.jcp.org/jsf命名空间中至少有一个jsf:xxx attribute
  2. 至少有一个“identifying attribute”与特定的JSF组件相关联。
  3. 对于<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?