ポートレットプロジェクト(Spring 3.1を使用)では、次の形式を検討してください。
<portlet:actionURL var="actionUrl" />
<portlet:renderURL var="renderUrl" />
<form action="${actionUrl}" method="POST">
<!-- A number of checkboxes -->
With selected do:
<button type="submit" name="stuff" value="action">Action</button>
<button type="submit" name="stuff" value="render" onclick="jQuery(this).closest('form').prop('action', ${fn:escapeXml(json:json_encode(renderUrl))})">Render</button>
</form>
ご覧のとおり、2つの送信ボタンがあるフォームがあります。押されたボタンに応じて、アクションフェーズに進むか、アクションフェーズをスキップして直接レンダリングフェーズに進みます。
上記のコードは機能し、私が望む効果がありますが、きれいではありません。これは、JavaScriptを使用してフォームのアクション属性を交換するハックのようなものです。
このサーバー側を実行するためのJSR-286準拠の方法はありますか?私が率いるアイデアの1つは、アクションフェーズでレンダリングフェーズ(ModelAndViewオブジェクトをまとめる)で通常行うことを実行し、ModelAndViewをセッションに格納し、セッションからレンダリングメソッドでポップして返すことでした。 。しかし、それでもそれは手に負えないハックのように感じます。そのためのきれいな解決策はありますか?