質問

最近、JSFの仕事を始めました。それ以前は、Web開発に常にPHPまたはPythonを使用していました。

JS:h:commandLinkタグが使用されている場合、JSFがHTTP POSTを使用してナビゲートすることを知って、少し驚きました。

これは明らかにJSFアプリを構築する正しい方法なので、commandLinkを使用しています。 JSFがナビゲーションにPOSTを使用するのはなぜですか? GETの何が問題になっていますか? onclickイベント用にJSFによって自動的に生成されるJavascriptがGETリクエストの最大長を超える可能性があると想定できます。

h:commandLinkを使用してナビゲートされるページが既にいくつかあります。これは、ブラウザの戻るボタンを使用するまで有効です。 JSFで戻るボタンを処理するにはどうすればよいですか?

JSFがPOSTを中心に構築された理由を理解するのに苦労しています。ブックマーク、バックページング、検索エンジンでページをインデックスに登録する機能を破壊します。

役に立ちましたか?

解決

クライアントでリンクを作成するのに役立ちませんが、 outputLink

いくつかの更新の問題に役立つナビゲーションルールのリダイレクト要素があります。

<navigation-rule>
  <display-name>navBack</display-name>
  <from-view-id>/navBack.jsp</from-view-id>
  <navigation-case>
    <from-outcome>navTo</from-outcome>
    <to-view-id>/navTo.jsp</to-view-id>
    <redirect />
  </navigation-case>
</navigation-rule>

他のすべてが失敗した場合、次のアクションのように、自分でリダイレクトURLを実行できます。

public String doAction() {
  System.out.println("Did some non-idempotent operation");
  FacesContext context = FacesContext.getCurrentInstance();
  ExternalContext extContext = context.getExternalContext();
  Application app = context.getApplication();
  ViewHandler viewHandler = app.getViewHandler();
  String url = viewHandler.getActionURL(context, "/navTo.jsp");
  url = url + (url.indexOf('?') < 0 ? '?' : '+') + "foo=bar";
  url = extContext.encodeResourceURL(url);
  try {
    extContext.redirect(url);
  } catch (IOException e) {
    throw new FacesException(e);
  }
  return null;
}

警告:URLを正しくエンコードしているかどうか思い出せません。

さまざまなサードパーティライブラリが、さまざまな機能を追加します。この領域でJSF 2.0で何かが行われたかどうかはわかりませんが、一見の価値があるかもしれません。

他のヒント

うん。 JSFはPOSTを中心に構築されており、JSFの最大のこだわりの1つです。ブックマーク可能なGETableページについては、JAX-RS / SeamまたはSpringをご覧ください。

BalusCが彼のブログで言ったように、GETページ間のナビゲーションに使用する必要があります。 ナビゲーションには h:outputLink を使用します。

彼のPostRedirectGetListenerを読むと、フォームの再送信確認メッセージのバック/リフレッシュが解決されます。

部分的なAjax処理を処理するために(関連する場合) beforePhase に以下を追加することをお勧めします。

if(event.getFacesContext().getPartialViewContext().isAjaxRequest())
{
    return;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top