使用Liferay,SpringMVC和@RequestMapping,我错过了什么?

时间:2014-09-16 09:17:17

标签: java jsp spring-mvc liferay

我正在尝试将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但据我所知,我正在做同样的事情。

这让我发疯,我错过了什么?

2 个答案:

答案 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" />