0

表示するエラーメッセージがない場合(ユーザーがエラーページをブックマークしている場合など)、seamアプリケーションのエラーページをホームページにリダイレクトしたい。

pages.xmlには、次のようなエラーページにつながるルールがいくつかあります。

<!-- pages.xml -->
  <exception class="org.jboss.seam.framework.EntityNotFoundException"
    log-level="warn">
    <redirect view-id="/error.xhtml">
      <message severity="warn">#{messages['jsf.RecordNotFound']}</message>
    </redirect>
  </exception>

失敗したEL式をいくつか試し、メッセージがないことを確認した後、確認を行うためにバッキングBeanを追加しました。

<!-- pages.xml -->
  <page view-id="/error.xhtml">
    <action execute="#{facesMessagesUtil.getGlobalMessagesCount()}" />
    <navigation>
      <rule if-outcome="none">
        <redirect view-id="/home.xhtml"/>
      </rule>
    </navigation>
  </page>

//FacesMessagesUtil.java

   import javax.faces.context.FacesContext;
   import org.jboss.seam.faces.FacesMessages;

   ...

   public String getGlobalMessagesCount()
   {
      log.info("currently {0} global facesMessages (seam)", FacesMessages.instance().getCurrentGlobalMessages().size());
      log.info("found messages in faces context: {0}", FacesContext.getCurrentInstance().getMessages().hasNext());
      log.info("got maximum severity: {0}", FacesContext.getCurrentInstance().getMaximumSeverity());

      if (!FacesContext.getCurrentInstance().getMessages().hasNext())
      {
         return "none";
      }
      return "some";
   }

上記のメソッドは、手動でエラーを生成したときに呼び出されますが、これはホームリダイレクトされ、そこにエラーメッセージが表示されます。ログメッセージは、私が使用しているクラスが表示されているメッセージの可視性を持っていないように見えることを報告します:

16:41:41,908 INFO  [FacesMessagesUtil] currently 0 global facesMessages (seam)
16:41:41,908 INFO  [FacesMessagesUtil] found messages in faces context: false
16:41:41,908 INFO  [FacesMessagesUtil] got maximum severity: null
  1. シーム2に、メッセージがあるかどうかを確認できるクラスはありますか?
  2. 追加のBeanなしでこのチェックを実行できるEL式はありますか?
4

1 に答える 1

0

これまでの調査で推測できる最善の方法として、ここでの問題は、seamがFacesMessagesをあるJSFコンテキストから別のコンテキストに転送する方法にあります。基本的に、メッセージは、pages.xmlルールが適用されている間に他のシームコンポーネントに削除され、ページがレンダリングされるまでに返されるように見えます。私は今のところ、「エラーなし」メッセージを表示することでこの問題を回避しました(ページのレンダリング中にグローバルメッセージが存在することに注意してください)。

<h:outputText id="noErrorsMessage"
    rendered="#{empty org.jboss.seam.international.statusMessages.currentGlobalMessages}">
    #{messages['jsf.NoErrors']}
</h:outputText>

そして、私のBeanの1つにハードコードされたリダイレクトルールがあります。

于 2012-02-23T03:49:13.710 に答える