2012-01-17 35 views
0

在Portlet項目(使用彈簧3.1),請看下面的表格:Portlet:提交給操作還是直接呈現階段的表單?

<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> 

正如你可以看到有兩個提交按鈕的形式。根據按下的按鈕,我要麼進入動作階段,要麼跳過動作階段,直接進入渲染階段。

上面的代碼工作,並有我想要的效果,但它不漂亮。這更像是一個黑客,使用JavaScript交換表單的action屬性。

是否存在符合JSR-286標準的服務器端?我要做的一個想法就是在渲染階段執行我通常要做的工作(將ModelAndView對象放在一起),將ModelAndView存儲在會話中,在會話中將其從render方法中彈出並返回。但是,這仍然是一種無用的黑客攻擊。任何漂亮的解決方案?

回答