m:rendered内のm:action問題をJavaScriptで解決してみる
S2JSFはm:renderedを記載したタグスコープ内では、submmitにm:actionを記載してもアクションを実行してくれません。MLでも度々出ている話題ですね。原因はm:renderedとm:actionの評価するタイミングが異なるためで、オブジェクトを受け渡せないからみたいです。
解決方法として、sessionやhiddenを用いる方法があるそうですが、ここではJavaScriptを使って解決してみます。
ポイントはJavaScript with Kumuでアクションを呼び出します。
事前にTeedaに含まれるkumu.jsをインクルードしてください。
HTML
<form id="hogeAction"> ← idをつける <input type="submit" value="登録" m:rendered="#{mode == 'INSERT'}" ← m:rendered部分 m:passthrough="true" ← passthroughを忘れないように。JavaScriptが呼べなくなります。 onclick="doAction('hogeAction','doInsert');" ← doAction(フォームのID、呼び出すAタグのID) /> <a id="doInsert" ← idをつける m:action="#{hogeAction.doInsert}" /> ← m:actionの実装(画面には表示されない) </form>
JavaScript doActionの実装
function doAction(formId, linkId) { var f = $i(formId); f.target = ''; f.elements[formId + ':__link_clicked__'].value = formId + ':' + linkId; f.submit(); return false; }