質問
からのアクションは私の豆いようにリダイレクトを他のページを見込んでビューパラメータとします。の推奨をすることがでJSF2?
E.g.) 今源のページ:http://localhost/page1.xhtml
でcommandButtonるアクション:
<h:commandButton value="submit" action="#{myBean.submit}" />
私の豆次のように記述されています。
@ManagedBean
@RequestScoped
public class MyBean {
private int id;
public String submit() {
//Does stuff
id = setID();
return "success";
}
さて、ここからはちょっとしたいの"を提出しアクションをナビゲート http://localhost/page2.xhtml?id=2
私たなビュー-paramっ航場合が奇ます。の面(faces-configスニペットは、以下に示すようになります:
<navigation-rule>
<from-view-id>/page1.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/page2.xhtml</to-view-id>
<redirect>
<view-param>
<name>id</name>
<value>#{myBean.id}</value>
</view-param>
</redirect>
</navigation-case>
</navigation-rule>
はかるものの、myBean設定を要求scopedでのみ通話myBean.getId()初めて負荷のアダプタのご使用、再利用と同じ値がすべてそれ以降の呼び出し、誤ったビューのパラメータpage2.
んのいずれかの方法このためには、その理由/ソリューションのためのビュー-paramになって要求されているからの私の豆ます。
解決
JSFでパラメータを渡すについて直感的なことは、あなたが(アクションで)送信するかを決定していないということではなく、あなたが(ターゲットページで)受け取りたいものです。
あなたがリダイレクトで終わるが、ターゲット・ページ・メタデータがロードされ、すべての必要なパラメータを読み取ってのparamsとしてURLに付加されているというアクションを行います。
これは、結合、他のJSFと同じメカニズムが正確であることを注:あなたが1つの場所からのinputTextの値を読み、それがどこかに書くことはできません。 viewParamに定義された値の式(リダイレクトする前に)読み取るため及び(リダイレクト後の)書き込みの両方に使用されます。
あなただけ行うにBeanで
@ManagedBean
@RequestScoped
public class MyBean {
private int id;
public String submit() {
//Does stuff
id = setID();
return "success?faces-redirect=true&includeViewParams=true";
}
// setter and getter for id
受信側が持っている場合:
<f:metadata>
<f:viewParam name="id" value="#{myBean.id}" />
</f:metadata>
これは、正確に何をしたい行います。
他のヒント
よりよいソリューションがなければ、私は仕事に見つかったことは、単に豆の見返りに、私のクエリ文字列を構築しています:
public String submit() {
// Do something
return "/page2.xhtml?faces-redirect=true&id=" + id;
}
未解決の最も柔軟性が、私はそれをしたいどのように動作するようです。
また、クエリ文字列を構築するプロセスをクリーンアップするために、このアプローチを使用しました: http://www.warski.org/blog/?p=185する
されました:
- http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/#get
- http://mkblog.exadel.com/2010/07/learning-jsf2-page-params-and-page-actions/
まえが必要のようなもの:
<h:link outcome="success">
<f:param name="foo" value="bar"/>
</h:link>
とは---...
<f:metadata>
<f:viewParam name="foo" value="#{bean.foo}"/>
</f:metadata>
審査から このページ, のようなものであり
<managed-bean>
<managed-bean-name>blog</managed-bean-name>
<managed-bean-class>com.acme.Blog</managed-bean-class>
<managed-property>
<property-name>entryId</property-name>
<value>#{param['id']}</value>
</managed-property>
</managed-bean>
あなたはこのようPrimefacesを使用してそれを行うことができます
<p:button
outcome="/page2.xhtml?faces-redirect=true&id=#{myBean.id}">
</p:button>
ただ、下記のようなリダイレクトタグに見られる属性を追加
<redirect include-view-params="true">
<view-param>
<name>id</name>
<value>#{myBean.id}</value>
</view-param>
</redirect>
Beanへの参照を含まない溶液
<h:button value="login"
outcome="content/configuration.xhtml?i=1" />
私のプロジェクトで、私はこのアプローチを必要としてます:
<h:commandButton value="login"
action="content/configuration.xhtml?faces-redirect=true&i=1" />