[Seasar-user:3094] Re: [S2JSF] m:rendered使用時のActionが呼ばれない(再)

Hirotaka HONMA manhole
2006年 1月 18日 (水) 19:06:12 JST


本間です。

原因がわかりました。
ボタン押下時にActionが実行されないのは、押下のタイミングでは
27行目のrenderedがfalseと評価されるためです。

- viewLogFormはREQUESTスコープにあるので、ボタン表示時と押下
  時でインスタンスが異なります。押下時にはselectedLogFile属
  性は初期値""になっています。
  結果、押下時にはspanのrenderedはfalseになります。
- renderedがfalseのUIComponent配下は、encodeがスキップされます。
- ボタンのencodeがスキップされるため、Actionが実行されません。

ということが起こっています。

回避策としては、松山さんがされたようにviewLogFormをSESSION
スコープへ置くか、hiddenと組み合わせるか(←詳しく検討してい
ませんが)といった方法があるかと思います。


On 12/21/05, 松山 大樹 <[E-MAIL ADDRESS DELETED]> wrote:
>
> 松山です。
> 以前、[Seasar-user:2844] に投稿した、
> <span m:rendered> で囲った中にあるアクションが実行されない、という
> 問題ですが、その後なぜか発生しなくなったので放っておいたのですが、
> 本日発生しましたので、再現できるサンプルを添付します。
> 解凍後、s2jsf-examples の/WEB-INF/lib をコピーしてください。
>
> 再現手順は、
>
> http://localhost:8080/viewLogTest/viewlog/ViewLog.html
>> 一覧から適当なファイル名をクリックする
>> ダウンロードリンクが表示される
>> ボタンを押す
>> アクション(m:action="#{viewLog.downloadLog}")が実行されない
>
> となります。
>
> ViewLog.html の、27行めと、36行めに
> <span m:rendered="#{viewLogForm.selectedLogFile != ''}" >
> </span>
> があり、これらをコメントにすると、アクションが実行されます。
>
> また、test.dicon 内の、instanceDef を、REQUEST → SESSION に
> すると、<span m:rendered= で囲まれている場合でも、アクションが
> 実行されます。
>
> とりあえず、SESSION で逃げますが。



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