我正在尝试将SpringMVC与Liferay集成,到目前为止,我已经取得了不同程度的成功,但这个特殊问题让我发疯。我有这个非常粗略的控制器
@Controller
@RequestMapping(value = "VIEW")
public class AppointmentsController {
@RequestMapping
public ModelAndView showAppointments(RenderRequest request, RenderResponse response) {
return new ModelAndView("view");
}
@RequestMapping(params={"action=addAppointment"}) // render phase
public String showAddAppointmentsForm(Model model) {
//return new ModelAndView("add_appointment");
System.out.println("TEST");
return "add_appointment";
}
}
第一个映射,工作正常,这个控制器负责渲染的portlet完美无缺。在包含portlet视图的jsp文件中,我有这个
<aui:button-row>
<portlet:actionURL var="addAppointmentURL">
<portlet:param name="action" value="addAppointment" />
</portlet:actionURL>
<aui:button onClick="${addAppointmentURL}" value="Add New Appointment" />
<aui:button type="button" value="Appointment History" />
</aui:button-row>
现在,问题是,当我点击“添加新约会”按钮时,操作请求不会被控制器中的showAddAppointmentsForm处理,而是我得到
org.springframework.web.portlet.NoHandlerFoundException: No matching handler method found for portlet request: mode 'view', p hase 'ACTION_PHASE', parameters map['action' -> array<String>['addAppointment']]
我尝试了很多东西,将portlet模式从VIEW更改为EDIT - 没有用,将showAddAppointmentsForm方法的@RequestMapping更改为@ActionMapping - 这有效,但它坚持认为装饰的方法应该是无效的无法返回我想要渲染的新jsp文件。
我在这里引用了文档 - &gt; http://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/portlet.html#portlet-ann-requestmapping-arguments但据我所知,我正在做同样的事情。
这让我发疯,我错过了什么?
答案 0 :(得分:3)
试试这个@ActionMapping(params = "action=addAppointment")
此处有更多信息http://www.opensource-techblog.com/2012/09/render-and-action-methods-in-spring-mvc.html
答案 1 :(得分:1)
所以,在@Danish的答案之后,我有点跟踪我所做的是:
@RenderMapping(params={"action=addAppointment"}) // render phase
public String showAddAppointmentsForm(Model model) {
//return new ModelAndView("add_appointment");
System.out.println("TEST");
return "add_appointment";
}
注意@RenderMapping anotation,而不是@RequestMapping或@ActionMapping。
在视图中:
<portlet:renderURL var="addAppointmentURL">
<portlet:param name="action" value="addAppointment"></portlet:param>
</portlet:renderURL>
<aui:button onClick="${addAppointmentURL}" value="Add New Appointment" />