[Seasar-user:5487] Re: [S2JSF] ボタン使用時にパラメータを渡せない

onishi [E-MAIL ADDRESS DELETED]
2006年 12月 15日 (金) 10:19:48 JST


おおにしです。

標記の件解決しました。

ボタン使用時はhiddenで[m:passthrough="true"]を記述することで名前が変更されなくなり、パラメータが渡せるようになりました。

f:paramを使用した場合は、やはりパラメータが渡せませんでした。
(Action内のパラメータのsetterを通らない)

-- 解決コード --
<input type="button" value="..." m:action="hogeAction.hoge">
  <input type="hidden" m:name="menuNo" m:value="1" m:passthrough="true" />
</input>


原因は何かと処理実行後のHTMLのソースを見てみた所、
ボタンの場合、パラメータの名前が変更されていて、
リンク使用時のようにパラメータ名が記述されていませんでした。

-- ボタン : hiddenの名前が定まっていない --
<input id="_id14:_id28" name="_id14:_id28" type="submit" value="HOGE" onclick="clear__5Fid14();" />
<input type="hidden" id="_id14:_id30" name="_id14:_id30" value="1" />

-- リンク : リンク自体にmenuNoとパラメータ名が記述されている(●の部分) --
<a href="#" onclick="clear__5Fid14();document.forms['_id14'].elements['_id14:_link_hidden_'].value='_id14:_id55';document.forms['_id14'].elements[●'menuNo'].value='3';if(document.forms['_id14'].onsubmit){document.forms['_id14'].onsubmit();}document.forms['_id14'].submit();return false;" id="_id14:_id55">HOGE


> 
> 米林です。
> 
> From: "onishi" <[E-MAIL ADDRESS DELETED]>
> Sent: Wednesday, November 29, 2006 3:32 PM
> 
> > おおにしと申します。
> >
> > 過去のメーリングリストを見てみて、当てはまるものがあったのですが、
> > 文字化けしてて肝心な所が全く読めなかったので質問させていただきます。
> >
> > 以下の用にするとパラメータを渡せません。
> > リンクを使うと問題なくパラメータは渡せます。
> >
> > <input type="button" value="データ照会" m:action="#{hogeAction.hoge}">
> >   <span m:inject="f:param" m:name="menuNo" m:value="menuNo" />
> > </input>
> >
> > アクションクラスにはmenuNoのフィールドとsetterを記述しています。
> >
> > サンプル解説を見ると、普通に書かれているのでパラメータを渡せると思っています。
> > 何が原因なのでしょうか?
> 
> s2jsf-exampleのforeach/forEachResult.htmlの31行目に以下を追加して
> m:actionをaddAction.hogeに変更。
> =======================================================================
> <input type="button" m:action="#{addAction.hoge}" value="to ResultPage"
>   onclick="location.href='forEachResult.html'">
>   <span m:inject="f:param" m:name="index" m:value="#{i}"/>
>   <span m:inject="f:param" m:name="menuNo" m:value="menuNo"/> ※この行
> </input>
> 
> =======================================================================
> 
> examples.jsf.action.impl.AddActionImplに以下を追加。
> =======================================================================
> private String menuNo;
> public void setMenuNo(String menuNo) {
>     System.out.println("###called setter###[" + menuNo + "]");
>     this.menuNo = menuNo;
> }
> public String hoge() {
>     System.out.println("###called addAction.hoge###");
>     return null;
> }
> =======================================================================
> 
> 上記を実行するとパラメータを渡せるのが確認出来ると思います。
> パラメータで渡そうとするオブジェクトのスコープがRequestに
> なっているのではないでしょうか?
> ですので、パラメータが渡せないのでは無く
> 意図した値が得られないという事ではないかと思うのですが
> いかがでしょう?
> 
> ---
> 米林 正明
> [E-MAIL ADDRESS DELETED]
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 





Seasar-user メーリングリストの案内