4

JSFのマネージドBeanでURIから渡されたパラメータをキャッチする方法を教えてもらえますか? すべてのノードがナビゲーションケースにリンクしているナビゲーションメニューがあります。そこには 2 つの類似したアイテムがあります: 製品の取得と製品の発行です。同じページですが、productType という 1 つの異なるパラメーターがあります。次のように「to-view-id」要素のURLに追加するだけで設定しようとしています:

<navigation-case>
    <from-outcome>acquiring|products</from-outcome>
    <to-view-id>/pages/products/list_products.jspx?productType=acquiring</to-view-id>
</navigation-case>

<navigation-case>
    <from-outcome>issuing|products</from-outcome>
    <to-view-id>/pages/products/list_products.jspx?productType=issuing</to-view-id>
</navigation-case>

しかし、マネージド Bean からこの「productType」を取得できません。次のように FacesContext を介して取得しようとしました。

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("productType")

そして、このように:

HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    request.getParameter("productType");

そして、faces-config.xml のマネージド Bean のパラメーターとしてそれを含め、通常のセッターを介して取得しようとしました:

 <managed-bean>
        <managed-bean-name>MbProducts</managed-bean-name>
        <managed-bean-class>my.package.product.MbProducts</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
     <managed-property>
         <property-name>productType</property-name>
         <value>#{param.productType}</value>
     </managed-property>
    </managed-bean>
...
public class MbProducts {
...
 public void setProductType(String productType) {
  this.productType = productType;
 }
...
}

しかし、これらの方法はどちらも私を助けませんでした。それらはすべて null を返しました。このproductTypeを取得するにはどうすればよいですか? または、どうすれば他の方法で渡すことができますか?

4

1 に答える 1

3

ナビゲーション ルールはデフォルトでforwardを行います。つまり、最初のリクエストを再利用します。転送されたリソースのリクエスト パラメータにどのような方法でアクセスしようとしても、常に最初のすでに処理されたリクエストからそれらを取得しようとします。

これを修正するには、転送ではなくリダイレ​​クトを実行する必要があります。まったく新しいリクエストが作成されます (ブラウザのアドレス バーにも反映されます)。

JSFでは、追加

<redirect/>

ナビケースに入れます。

于 2010-04-01T15:42:10.317 に答える