2012-05-10 19 views
1

ここにシナリオがあります。私のマネージドBeanでは、私は新しいFacesMessageのオブジェクトを作成し、そのように、任意のUIコンポーネントに関連付けない、のFacesContextに追加します。そのようなJSF:FacesMessageが2回表示されています

FacesContext context = FacesContext.getCurrentInstance(); 
FacesMessage message = new FacesMessage(); 
message.setSummary("Hi there!"); 
context.addMessage(null, message); 

を私のXHTMLページでは、I出力私のメッセージ:

<h:messages id="someId" globalOnly="true" showSummary="true" showDetail="false" styleClass="startUpMessages"/> 

しかし、生成されたHTMLのようなので、二回のメッセージの要約を表示します。

<ul id="mainForm:someId" class="startUpMessages"><li> Hi there! </li><li> Hi there! </li></ul> 
<ul id="javax_faces_developmentstage_messages" title="Project Stage[Development]: Unhandled Messages"></ul> 

は、誰もがこの動作を説明できますか?

+1

複数回実行されていないメッセージを追加するためのコードはありますか? .....簡単なプリントアウトを配置する..... – Daniel

+0

提案したようにFacesMessageの作成の隣にマネージドBeanにプリントアウトを配置しました。プリントアウトは1回だけ表示されます。 – Jim

+0

もしあなたがcontext.addMessage( "test"、message)をしたら、ちょっと不思議です。 globalOnly = "false"は他のメッセージを削除しますか? –

答えて

2

からDevelopmentから
変更PROJECT_STAGEは、この問題は問題で言及されなかったアプリケーションでフェーズリスナーでは見落とし、によって引き起こされたが判明しました。

このフェーズリスナーは、アプリケーションの1つの特定のインスタンスで、2つの隣接する要求間で永続的なFacesMessagesの問題を解決するように設計されています。リクエストスコープBeanで作成されたすべてのFacesMessagesをセッションに一時的に格納します。

しかし、フェーズリスナーは、すべてのリクエスト中に実行するよう誤って実装されていました。だから、問題のようなセッションスコープのBeanで作成されたFacesMessagesは重複してしまい、なぜメッセージの要約が2回表示されたのかがわかります。

0

Web.xmlを変更しようとします。 Production

<!-- Web application context parameters --> 
<context-param> 
    <description>One of Production, Development, UnitTest, SystemTest, Extension 
     Default is Production. 
    </description> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Production</param-value> 
</context-param> 
+0

これは、未処理のメッセージのみを非表示にします。 OPの場合、複製メッセージは未処理のメッセージではありません。 – BalusC

関連する問題