いパスビューのパラメータの際航行からのアクションにJSF2?

StackOverflow https://stackoverflow.com/questions/3605238

  •  25-09-2019
  •  | 
  •  

質問

からのアクションは私の豆いようにリダイレクトを他のページを見込んでビューパラメータとします。の推奨をすることがで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する

されました:

まえが必要のようなもの:

<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&amp;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&amp;i=1"  />
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top