7

私はJSF 2 Web アプリケーションを開発しており、ページからページへの暗黙的なナビゲーションを使用して、結果の値を指定し、URL の値を変更しています。また、一部のページをすべて送信しなくても変更できるようにするための Ajax リクエストもいくつかあります。

たとえば、ユーザーのデータを編集して変更を保存するときに問題が発生します。マネージド Bean はユーザー データを保存し、ユーザー リストに移動するための文字列を返します。ユーザーが適切に保存FacesMessageされると、アクション メソッドが終了する前に a が追加されます。

ボタン

<p:commandButton value="#{msg.UPDATE}" action="#{manager.actionSave}"
            ajax="false" />

メソッドへのコーディング

FacesContext.getCurrentInstance().addMessage(clientId, 
    new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg));

しかし、<h:messages />メインページにタグを付けても何も表示されません。

4

1 に答える 1

11

faces-redirect=true問題の症状は、結果のパラメーターまたはナビゲーション ケースのエントリのいずれかによる (既定の) 転送ではなく、リダイレクトによってナビゲートしていることを示しています (<redirect/>まだレガシー ナビゲーション ルールを で使用している場合) faces-config.xml

Faces メッセージはリクエスト スコープであるため、現在のリクエストによって提供されるリソースでのみ使用できます。リダイレクトによってナビゲートする場合、基本的には、指定された URL で新しいリクエストを作成するよう Web ブラウザーに指示しています。そのリクエストでは、顔のメッセージはまったく利用できません。

たとえば、 POST-Redirect-GETパターン (これは良いことです)を達成するために、リダイレクトが本当に必須である場合は、メッセージを flash スコープに格納する必要があります。を呼び出しFlash#setKeepMessages()て渡すことでそれを行うことができますtrue

context.addMessage(clientId, message);
context.getExternalContext().getFlash().setKeepMessages(true);

2.1.14 より古いバージョンの Mojarra を使用していて、別のベース フォルダー内のリソースにリダイレクトしている場合、これは失敗することに注意してください。issue 2136も参照してください。

于 2013-01-09T17:54:53.033 に答える