我有一个portlet,它有很多渲染和操作方法:
@Controller
@RequestMapping("VIEW")
public class CartController {
@RenderMapping() // default render method
public String defaultRender(RenderRequest req, RenderResponse res, Model model) throws PortalException, SystemException {
...
}
@RenderMapping(params="action=showCustInfo")
public String showCustInfo(RenderRequest req, RenderResponse res, Model model) throws PortalException, SystemException {
...
}
@ActionMapping(params="action=acceptCart")
public void acceptCart(ActionRequest req, ActionResponse res, Model model) throws PortalException, SystemException {
...
res.setRenderParameter("action", "showCustInfo");
...
}
在上面的代码中,方法 acceptCart 设置一个渲染参数,该参数应该导致在渲染阶段调用 showCustInfo 。
问题是每次都会调用默认的渲染方法。我错过了什么?
答案 0 :(得分:1)
原因(似乎)是行动 - 参数在我命令时未被替换
res.setRenderParameter("action", "showCustInfo");
不是替换值,而是为action参数添加了这个值,如下所示(伪):
// Before:
params['action'] = ['acceptCart'] // all req params in Spring are handled as String arrays..
// After:
params['action'] = ['acceptCart','showCustInfo']
此时,Spring似乎不知道该怎么做并调用默认的render方法。 我通过为渲染参数('render')使用不同的参数名来解决这个问题。因此,现在动作由'action'参数和渲染器'render'-parameter调用。