在 Portlet 项目(使用 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>
如您所见,有一个带有两个提交按钮的表单。根据按下的按钮,我要么想进入动作阶段,要么跳过动作阶段并直接进入渲染阶段。
上面的代码有效并且具有我想要的效果,但它并不漂亮。它更像是一个 hack,使用 javascript 交换表单的 action 属性。
是否有符合 JSR-286 的方法来执行此服务器端?我想到的一个想法是在动作阶段做我通常在渲染阶段做的事情(将 ModelAndView 对象放在一起),将 ModelAndView 存储在会话中,从渲染方法中的会话中弹出它并返回它. 但这仍然感觉像是一个不起眼的黑客。有什么漂亮的解决方案吗?