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を挿入しない「rendered」プロパティを持つJSFコンポーネントはありますか?

残念ながら、Facelets ui:remove / ui:includeには「rendered」プロパティがありません。

<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コンポーネントはありますか?

id 属性と style 属性を含めない限り、 panelGroup コンポーネントは html をレンダリングしません。例えば

<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 に答える