3

Weblogic Beehive で最初に記述されたサイトを JSF 2.0 に書き直している最中です。新しいサイトが生成するメッセージを、既存のサイト。

素晴らしいタグを使用してみましたが、既存のメッセージ フレームワークのスタイルとロジックは、この出力にうまく適合しません。

メッセージを出力するだけでなく、それらに対して条件ロジックも実行するカスタムタグを作成できるJSFのオプションはありますか?

例えば、サマリと詳細の文字列でFacesMessagesを作成していたのですが、旧サイトのフォーマットでは最高位のサマリしか表示されません。たとえば、4 つのメッセージを追加すると、それぞれが同じ要約メッセージを持ち、詳細が異なります。重大度が最も高いサマリーのみを表示したい。

また、各メッセージではなく、メッセージをボックスとして表示およびスタイル設定する必要があり、詳細の一部には条件付き CSS クラスが必要です。

4

2 に答える 2

3

JSF 2.x を使用している場合はFacesContext#getMessageList()、ループで繰り返すことができます。各項目は、FacesMessage複数のゲッターを持つ です。

<ui:repeat value="#{facesContext.messageList}" var="facesMessage">
    Severity: #{facesMessage.severity}<br />
    Summary: #{facesMessage.summary}<br />
    Detail: #{facesMessage.detail}<br />
    <br />
</ui:repeat>

これにより、メッセージの周りのよりきめ細かい HTML マークアップが可能になります。

にこのメソッドがない JSF 1.x をまだ使用している場合は、ユーティリティ Bean または EL 関数を使用して最初FacesContextに収集する必要があります。FacesContext#getMessages()List<FacesMessage>

List<FacesMessage> messageList = new ArrayList<FacesMessage>();
Iterator<FacesMessage> messages = FacesContext.getCurrentInstance().getMessages();

while (messages.hasNext()) {
    messageList.add(messages.next());
}

同じ方法messageListを使用して、ビューでこれを反復処理できます。<ui:repeat>

于 2011-08-09T19:05:40.463 に答える
0

私はJSFページ(xhtml)でこれに行き着きました:

            <c:set var="messageList" value="#{facesContext.messageList}" />
            <c:set var="maxSev" value="#{facesContext.maximumSeverity.ordinal}" />
            <ui:repeat value="${messageList}" var="fm" >
                <c:choose>
                     <c:when test="${fm.severity.ordinal eq 0}">
                         <c:set var="summaryStyleClass" value="outcome"/>
                         <c:set var="detailStyleClass" value="outcome_details"/>
                     </c:when>
                     <c:when test="${fm.severity.ordinal eq 1}">
                         <c:set var="summaryStyleClass" value="warning_title"/>
                         <c:set var="detailStyleClass" value="warning"/>
                     </c:when>
                     <c:when test="${fm.severity.ordinal eq 2}">
                         <c:set var="summaryStyleClass" value="error_title"/>
                         <c:set var="detailStyleClass" value="error"/>
                     </c:when>
                     <c:when test="${fm.severity.ordinal eq 3}">
                         <c:set var="summaryStyleClass" value="fatal"/>
                         <c:set var="detailStyleClass" value="fatal_details"/>
                     </c:when>
                </c:choose>
            </ui:repeat>
            <div class="${detailStyleClass}" >
                 <div class="${summaryStyleClass}">
                        <ui:repeat value="${messageList}" var="fm" >
                             <c:choose>
                                 <c:when test="${fm.severity.ordinal eq maxSev}">
                                     ${fm.summary}
                                 </c:when>
                             </c:choose>
                        </ui:repeat>
                 </div>
                  <ul>
                     <ui:repeat value="${messageList}" var="msg">
                         <li><h:outputText value="${msg.detail}"/></li>
                     </ui:repeat>
                </ul>
            </div>

ここでパターンを壊していると確信していますが、summaryStyleClass変数とdetailStyleClass変数を解決できるセクションが機能していないようです。ページの最も重大度の高いメッセージに応じてメッセージのスタイルを設定する必要があるため、これらを繰り返し処理しています。これは、ブラウザのページで取得しているレンダリングされた出力です。

            <div>
                 <div>Warning:</div>
                 <ul>
                      <li>Warning message.</li>
                </ul>
            </div>

スタイルがないことに注意してください...

于 2011-08-15T18:26:02.853 に答える