2

我有这样的事情:

<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”元素。

是否有一个不插入任何 html 的具有“渲染”属性的 JSF 组件?

不幸的是,Facelets ui:remove/ui:include 没有“渲染”属性:

<ul>        
<li>User</li>
<ui:remove rendered="#{request.isUserInRole('admin')}">
<li>Admin</li>
</ui:remove>
..
</ul>

我应该如何解决这种情况?

4

2 回答 2

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>
于 2012-05-04T07:49:49.430 回答
3

是否有一个不插入任何 html 的具有“渲染”属性的 JSF 组件?

您已经有了答案,只是为了记录 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>

if 表达式 if false

于 2012-05-04T08:14:55.557 回答