- - PR -
JSF request Scopeに値をセットする
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-03-12 19:18
いつもお世話になっています。
現在JSFで値の受け渡しをしようとしていますが、上手くいきません。 ■やりたいこと==================================== 1)testA.jspでリンクをクリックし、actionListenerでToTestB.javaを実行。 2)ToTestB.javaで、とある値をtestB_Bean.java(faces-configでrequestに指定されている)の該当フィールドにsetする。 ================================================= ○faces-config <managed-bean> <managed-bean-name>testB_BEAN</managed-bean-name> <managed-bean-class>jp.co.Hoge.test.testB_Bean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> ================================================= ○testA.jsp <h:commandLink action="testB" value="testBへ遷移" immediate="true" > <f:actionListener type="jp.co.Hoge.test.ToTestB" /> </h:commandLink> ================================================= ○ToTestB.java public class ToTestB implements ActionListener{ public ToTestB(){ } public void processAction(ActionEvent e) throws AbortProcessingException { FacesContext context = FacesContext.getCurrentInstance(); testB_Bean tb = (testB_Bean)context.getApplication(). createValueBinding("#{testB_BEAN}").getValue(context); String str = "testです"; tb.setAAA(str); } } ================================================= ○testB_Bean.java public class testB_Bean { private String AAA; (AAAのgetter/setterがあります) ================================================= ○testB.jsp (※ここでは該当フィールドにまた入力できるようにinputを指定しています) <h:inputText value="#{testB_BEAN.aAA}" /> ================================================= ToTestB.java 実行時には System.out.println(tb.getAAA()); をすると値がきちんと入っているようなのですが、 遷移後にtestB.jspを開くと値がなくなっています。 ちょっと変えて、 FacesContext context = FacesContext.getCurrentInstance(); Application app = context.getApplication(); VariableResolver vr = app.getVariableResolver(); testB_Bean tb = (testB_Bean)vr.resolveVariable(contextX,"testB_BEAN"); でも試しましたが、やはりダメでした。。 どなたか分かる方がいらっしゃいましたら、 誠に恐縮ですがご教授よろしくお願いいたします。。 □追記□ ・testB_Bean.javaをsessionにすると表示されます。 ・アクションリスナーをやめて通常のcommandButtonでAction処理をした場合でも同じ現象となります。 [ メッセージ編集済み 編集者: しま太郎 編集日時 2007-03-13 10:44 ] | ||||||||
|
投稿日時: 2007-03-14 12:10
immediate=trueにしているので、モデル値が更新されていないのではないですか?
どのような意図でつけているのかわかりませんが、これを外してみてはどうでしょうか。 | ||||||||
|
投稿日時: 2007-03-14 12:42
□追記
2つの方法から値をset出来ることが確認できました。 ・set先のtestB_Bean.java をsessionにする。 ・現在faces-configで遷移を単純遷移にしているが、ページナビゲーションの遷移にする。 ================================================== ○現在のfaces-config <navigation-case> <from-outcome>Go_testB</from-outcome> <to-view-id>/jsp/testB.jsp </to-view-id> <redirect /> </navigation-case> ○変更すれば動くfaces-config <navigation-rule> <from-view-id>/jsp/testA.jsp</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/jsp/testB.jsp</to-view-id> </navigation-case> </navigation-rule> ================================================== ですが、この処理は各ページのメニュー画面から行うので、<from-view-id>値の固定が出来ないので2はできず、 またrerquestに設定するので1もできません・・ どのようにすれば値を受け渡しできるのでしょうか。。 [ メッセージ編集済み 編集者: しま太郎 編集日時 2007-03-14 12:48 ] | ||||||||
|
投稿日時: 2007-03-14 12:44
uk様、ご返答頂き、ありがとうございます。 このactionは各ページのメニューとして置いているので、immediate=true にしてあります。 念のためそちらも試しましてみたのですが、やはり値は受け渡しできませんでした。。 | ||||||||
|
投稿日時: 2007-03-14 15:03
ああ、リダイレクトしているんですね。だとしたら受け渡しできなくて当然です。 リダイレクトした場合、画面表示のリクエストがリンククリック時のリクエストとは 別に発生しますから、リクエストスコープでは受け渡しできません。 単純にリダイレクトではなくフォワードにするのではダメなんですか? 単純にリダイレクト | ||||||||
|
投稿日時: 2007-03-16 14:13
uk様、ご返信頂き、ありがとうございます。 気づくのが遅れてしまい、返信が遅れてしまいました。 申し訳ございません。。 リダイレクトだとダメだったのですね。。 ご説明をいただくと、なるほど!という感じです。。 ですが、SSL設定をしているページのため、そちらの都合上リダイレクトが必須となってしまい、こちらは外せない状況です。。 ということで、かなり力技なのですが faces-configで、testB.jspへ遷移する全ページに<navigation-rule>の設定を書き足してしまいました。。 ご返答頂き、誠にありがとうございました。。 |
1