我有这样的事情:
<ul>
<li>User</li>
<li>Admin</li>
..
</ul>
并且只有当实际用户处于“管理员”角色时才想呈现列表项“管理员”。
我知道,我可以这样做:
<ul>
<li>User</li>
<h:panelGroup rendered="#{request.isUserInRole('admin')}">
<li>Admin</li>
</h:panelGroup>
..
</ul>
但是,由于h:panelGroup。
,标记会插入“span”元素是否有一个带有'rendered'属性的JSF-Component,它不会插入任何html?
不幸的是,Facelets ui:remove / ui:include没有'rendered'属性:
<ul>
<li>User</li>
<ui:remove rendered="#{request.isUserInRole('admin')}">
<li>Admin</li>
</ui:remove>
..
</ul>
我该如何解决这种情况?
答案 0 :(得分:5)
你的意思可以通过使用ui:fragment来实现。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:fragment rendered="#{action.isUserLoggedIn()}">
<!-- this will only be shown to logged in users -->
</ui:fragment>
</ui:composition>
答案 1 :(得分:3)
是否有一个带有'rendered'属性的JSF-Component没有 插入任何HTML?
您已经有了答案,只是为了记录panelGroup组件不呈现任何html,前提是您不包含id和style属性。 例如
<ul>
<li>Hello</li>
<h:panelGroup rendered="#{expression}">
<li>world</li>
</h:panelGroup>
</ul>
将呈现为
<ul>
<li>Hello</li>
<li>world</li>
</ul>
如果表达式为真
和
<ul>
<li>Hello</li>
</ul>
如果表达式为假