2013-07-09 20 views
6

JSF 1.1(MyFaces)プロジェクトをJSF 2に移行しています。このアイデアは、JSPとXHTMLの両方をしばらく維持して定期的に移行することです。 JSPページでは、多くのajax4jsf-1.1.1タグを使用しています。 RichFacesは使用しません。Ajax4jsf 1.xを使用したJSF 1.1からJSF 2への移行

Caused by: java.lang.IllegalStateException: setViewHandler may not be executed after a lifecycle request has been completed 
    at org.apache.myfaces.application.ApplicationImpl.setViewHandler(ApplicationImpl.java:853) 
    at org.ajax4jsf.framework.ajax.InitPhaseListener.beforePhase(InitPhaseListener.java:92) 
    at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersBefore(PhaseListenerManager.java:76) 
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:131) 

それはajax4jsf.jarがあるになります。JSF 2にシステムを設定した後、クラスパスにajax4jsf.jarでJSPページにアクセスしようとした(Baluscでのチュートリアルで説明したすべての設定変更で)、我々は例外を取得しますJSF 2と互換性がありません.LifeCycleの設定に問題があります。

JSF 2 JSPでa4jを動作させる方法はありますか?私たちがXHTMLを使用するとき、私たちはこれをすべて必要としないことを知っています。

+0

あなたはRichFacesの4の代わりに、AJAX4JSFを使用してみましたか? –

+0

はい、すぐに試しました。しかし、JSPでのナビゲーションとアクション処理に関する問題に直面しています。私たちは将来primefaceを使用する計画を持っていたため、深くは見ていないし、現時点ではRichfacesに冒険したくはありませんでした。 –

+0

RichFacesはajax4jsfプロジェクトを吸収しました。私はRichFacesへの*冒険*にならない理由を理解していません。 –

答えて

13

Ajax4jsf 1.xを完全に削除します。 JSF2との互換性はありません。代わりに、JSF2はAjax4jsf 1.xで以前に提供されたすべてのコア機能をカバーする新しいメインAjaxタグ<f:ajax>を提供しています。

RichFaces 4へのアップグレードがオプションではない場合(RichFacesコンポーネントをどこにも使用していないため)、Ajax4jsf 1.xを削除し、すべての<a4j:xxx>タグを標準のJSF2に置き換えてください。

  • <a4j:ajaxListener><f:ajax listener>を使用してください。
  • <a4j:keepAlive>:ビューのスコープに管理対象Beanを挿入するだけで@ViewScopedとなります。
  • <a4j:log>:JSコンテキストでjsf.ajax.addOnEvent()またはjsf.ajax.addOnError()を使用してください。
  • <a4j:commandLink>:ちょうどネスト<f:ajax>の内側<h:commandLink>です。
  • <a4j:outputPanel><h:panelGroup>を使用し、そのIDを<f:ajax render>またはPrimeFaces <p:outputPanel>に含めることを忘れないでください。
  • <a4j:repeat>:標準<ui:repeat>を使用してください。
  • <a4j:form><h:form>を使用すると、<f:ajax>が自動認識されます。
  • <a4j:htmlCommandLink>:ちょうどネスト<f:ajax>の内側<h:commandLink>
  • <a4j:jsFunction>:交換しません。 OmniFaces <o:commandScript>またはPrimeFaces <p:remoteCommand>を検討してください。
  • <a4j:region><f:ajax execute>を使用するだけで、複数のコンポーネントの周りに<f:ajax>をラップすることもできます。
  • <a4j:loadBundle>:標準<f:loadBundle>を使用してください。
  • <a4j:status>:JSコンテキストでjsf.ajax.addOnEvent()またはjsf.ajax.addOnError()を使用してください。
  • <a4j:actionparam>:標準<f:param>を使用してください。
  • <a4j:loadScript>:標準<h:outputScript>を使用してください。
  • <a4j:mediaOutput>:交換しません。 PrimeFaces <p:media>を検討してください。
  • <a4j:poll>:置換えません。 OmniFaces <o:commandScript>またはPrimeFaces <p:poll>を検討してください。
  • <a4j:commandButton>:ちょうどネスト<f:ajax>の中に<h:commandButton>
  • <a4j:include>:標準<ui:include>を使用してください。
  • <a4j:loadStyle>:標準<h:outputStylesheet>を使用してください。
  • <a4j:support>:標準<f:ajax>を使用してください。

JSPファイルの名前をFaceletsファイルに変更する必要があります。単純なケースでは、通常、ルート宣言とファイル拡張子を変更するだけです。 Faceletsを使用すると、複製されたすべてのコードを単一のテンプレートで簡単に置き換えることができます。以下の答えが適用されます。

+0

しかし、私が正しく理解すれば、タグはJSPで正しく動作しませんか? JSP(XHTMLにJSPを再実装するのではなく)で動作するソリューションはありますか? –

+0

JSPはJSF2では非推奨です。したがって、実際にFaceletsに移行することも期待されています。これは参考になるかもしれません:http://stackoverflow.com/questions/4441713/migrating-from-jsf-1-2-to-jsf-2-0/4532870#4532870 – BalusC

+0

私たちは既存の私たちがXHTMLに移行している間は、a4jタグをそのまま使用しています。見えない。 RichFacesにアップグレードすると、JSPページでa4jタグをサポートするだけのオプションが選択されているとは限りません。 –

関連する問題