2011-07-28 8 views
0

Stringを入力できるシンプルなフォームがあります。フォームを送信すると、ユーザーはユーザー入力をエコーする別のページにリダイレクトされます。最初のページはRequestScopedのBeanを使用し、2番目のページはViewScopedのBeanを使用しています。RequestScopedからViewScoped Beanにパラメータを渡す方法

最初のページ:

<h:form> 
     Type a String: <h:inputText value="#{requestScopedBean.property}"></h:inputText> 
     <h:commandButton value="To View" action="#{requestScopedBean.toViewScopedBean}"> 
      <f:setPropertyActionListener target="#{viewScopedBean.property}" value="#{requestScopedBean.property}" /> 
      <f:ajax execute="@form" /> 
     </h:commandButton> 
    </h:form> 

2番目のページ:それは動作しない理由を

This is the property passed by the requestScoped bean: <h:outputText value="#{viewScopedBean.property}"></h:outputText><br/> 
    This is the property created in the PostConstruct: <h:outputText value="#{viewScopedBean.otherProperty}"></h:outputText> 

私は理解しています。フォームが送信されると、viewScopedBean.propertyは正しい値に設定されますが、別のビューに切り替えるので、新しいViewScopedBeanが作成されます。そういうわけで、リクエストからの価値が失われてしまいます。

のスコープを変更することなく、1ページ目から2ページ目にどのようにパラメータを渡しますか

+0

から値を取得することができGETリクエスト(例:mydomain.com?myString =helloWorld)、または文字列がURLパラメータを介して渡すには長すぎると思いますか?または、ページ間で情報を維持するために、その情報をセッションに保存して、2ページ目に戻るとその情報を取り戻すことができます。あなたの文字列がセッションには長すぎると私はイメージを傾けません。 –

答えて

0

代わりにあなたがrequestScopedBeanアクション

public String toViewScopedBean(String string){ 
    Map<String,Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap(); 
    requestMap.put("StringKey", string); 
    return "toViewScopedBean"; 
} 

をトリガーする場合は、要求地図上の文字列を配置し、あなただけの使用URLパラメータを経由して文字列を渡すことができvalueScopedBean

public String getProperty(){ 
    Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap(); 
    return (String) requestMap.get("StringKey"); 
} 
+0

私は 'SessionMap'を使いました。素晴らしいリソース:http://balusc.blogspot.com/2006/06/communication-in-jsf.html – Sydney

関連する問題