2010-11-22 6 views
4

JSF 2.0(mojarra)+ primefacesでWebアプリケーションを開発しています。過去には、jstlライブラリの[c:set]タグを使用して、一時的なデータを格納したり、他のタグから出力したりしていました。JSF 2.0とJSTLでc:setタグを使用して一時的なデータを保存する

私の現在のケースでは、もう一度使用したいと思いますが、正常に動作せず、理由がわかりません。以下の例では動作しますが、特に動作します。なぜケース2が正しく動作しないのですか?セットには、時間の前に処理される:outputTextのがレンダリングされるので、私はJSFとJSTLを統合しようとしていないが、私はCを信じているからだけで、推測を作る

<h:form id="userAdministration"> 
    <p:messages id="messages" showDetail="true" /> 
    <p:dataTable id="userTable" selectionMode="single" var="user" value="#{users}"> 
    <p:column> 
     <f:facet name="header"> 
     <h:outputText value="#{message.user_table_header_id_column}" /> 
     </f:facet> 
     <h:outputText value="#{user.id}" /> 
    </p:column> 

    <p:column> 
     <f:facet name="header"> 
     <h:outputText value="#{message.global_table_header_action_column}" /> 
     </f:facet> 
     <p:commandButton type="push" onclick="#{user.loginname}DeleteConfirmation.show()" value="#{message.global_table_action_delete}" image="ui-icon-trash"> 
     <f:setPropertyActionListener value="#{user}" target="#{userAdministrationController.selectedUser}" /> 
     </p:commandButton> 
     <!-- 1. WORKS FINE, STORED VALUE IS "loginname" --> 
     <c:set var="deleteConfirmationMessage" value="#{user.loginname}"></c:set> 
     <!-- 2. VALUE IS "!!!" AND NOT "loginname !!!" --> 
     <c:set var="deleteConfirmationMessage2"> 
     <h:outputText value="#{user.loginname}" />!!! 
     </c:set> 
     <!-- 3. WORKS FINE (OUTPUT "loginname") --> 
     <h:outputText value="#{user.loginname}" /> 
     <p:confirmDialog message="#{deleteConfirmationMessage}" header="#{message.user_dialog_delete_confirmation_title}" severity="alert" widgetVar="#{user.loginname}DeleteConfirmation"> 
     <p:commandButton value="#{message.user_dialog_delete_confirmation_no}" onclick="#{user.loginname}DeleteConfirmation.hide()" update="@form" type="button" /> 
     </p:confirmDialog> 
    </p:column> 

答えて

1

その本文に静的テキストしか表示されません。私は、JSFライフサイクルに関して、どのようなオーダー・タグ・ハンドラーが呼び出されているのかよく分かりませんが、いくつかのロギングを入れるとそのことが明らかになります。

-3
xmlns:c="http://java.sun.com/jstl/core" 

だけなぜケース2が正常に動作しないJSTL

+0

おかげで、私はすでに:(これは私のヘッダであることをやった:。 eglobetrotter

+3

これは#1と#3が正しく動作するという事実と矛盾します。 – BalusC

6

のためのtaglibとしてこれを追加しますか? taghandlersおよびUIコンポーネントが同時に実行されていないためだ

<!-- 2. VALUE IS "!!!" AND NOT "loginname !!!" --> 
<c:set var="deleteConfirmationMessage2"> 
    <h:outputText value="#{user.loginname}" />!!! 
</c:set> 

。 JSTLタグはタグハンドラであり、ビューの作成中(XHTMLファイルがJSFコンポーネントツリーに変換されるとき)に実行されます。 JSF <h:xxx>タグはUIコンポーネントであり、ビューのレンダリング中(JSFコンポーネントツリーがHTMLコードに変換/レンダリングされるとき)に実行されます。参考JSTL in JSF2 Facelets... makes sense?

したがって、<c:set>が実行されると、<h:outputText>はまったく実行されません。

しかし、この特定のでは、実際には<h:outputText>はまったく必要ありません。 value<c:set>に設定されているのとは別に、テンプレートテキストにEL式をそのままインラインで挿入することもできます(JSPでJSFを使用するときはFaceletsでJSFを使用するときに動作しますが、PrimeFaces、 PrimeFacesにはJSP taglibがまったくないため、Faceletsを使用しています)。

<c:set var="deleteConfirmationMessage2"> 
    #{user.loginname}!!! 
</c:set> 

またはおそらくあなたは、あなたがにISN具体的な機能要件に応じて、

<c:set var="deleteConfirmationMessage2" value="#{user.loginname}!!!" /> 

または

<p:confirmDialog message="#{user.loginname}!!!"> 

のような属性にEL、プレーン文字列を混在させることができることを認識していませんでした質問からはっきりと分かりませんが、<o:cache>コンポーネントをOmniFacesという別の方法で使用することもできます。これは、<c:set>の例のように、ページ/要求スコープ以外のより広い範囲の値をキャッシュする場合に、より便利です。

関連する問題