gpt4 book ai didi

java - 作为 Liferay Portlet 和 Servlet 的 Spring MVC Controller

转载 作者:行者123 更新时间:2023-11-30 08:48:34 25 4
gpt4 key购买 nike

我们正在尝试拥有一个作为 portlet servlet 工作的 spring MVC Controller ,以便部署在 Liferay 上下文中或作为独立版本。但是,如果我们决定在方法级别上有多个 RequestMappings(而不是在 Controller 级别上只有 1 个映射),我们似乎会发生冲突。我们得到如下所示的错误。

请注意,如果我们决定只在托管 servlet 映射portlet 映射的 Controller 级别上有一个 requestMapping,它就可以工作。

@RequestMapping({"view", "/"})

不工作的 Controller :

@Controller("controller")
@RequestMapping("VIEW")
public class MyController {

@RenderMapping
public ModelAndView doView(RenderRequest request, RenderResponse response) throws Exception {

HttpServletRequest portletHttpReq = PortalUtil.getHttpServletRequest(request);
HttpServletResponse portletHttpResp = PortalUtil.getHttpServletResponse(response);
return doView(portletHttpReq, portletHttpResp);
}

@RequestMapping(value="/home")
protected ModelAndView doView(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
// do something
return new ModelAndView("view");
}
}

产生的错误:

[...]Caused by: java.lang.IllegalStateException: 方法和类型级别之间的模式映射冲突:[/home] 与 [view]

您对我们如何实现这样的事情有什么建议吗?我们真正想要避免的是必须为每个 portlet/servlet 维护 2 个 Controller 。

谢谢。

最佳答案

我真的不认为这是个好主意...类级别的 @RequestMapping 注释肯定会导致问题,仅仅是因为 Spring portlet MVC 需要 portlet 模式,而 Spring Web MVC 需要一个根 URL。

此外,您的代码似乎也不正确,因为 ModelAndView 存在于 portlet MVC 中作为 web MVC Spring 框架的一部分,并且由于您不能同时导入两者,因此您必须为其中之一指定完整的包,并且由于您也没有这样做,所以您的代码是错误的。

除了技术问题外,Portlet 和 Servlet 都有不同的术语和观点。如果我听到这个,这些是我突然想到的一些关键问题:

  • 你打算如何处理不同的阶段(ACTION 和 RENDER)
  • 不同的 portlet 模式(查看、编辑、帮助...)怎么样?
  • 您打算如何处理特定的 portlet 功能(PortletSession、PortletPreferences,...)
  • 您将如何处理不同类型的请求(ResourceRequest、ActionRequest、RenderRequest、PortletRequst、EventRequest 与 HttpServletRequest)
  • 您打算如何处理安全问题?门户容器为您提供身份验证,独立的 Web 应用程序则不会。

这些只是来自 portlet 思维方式的问题,如果您从 Web 应用程序的角度来看,我敢肯定还有技术问题。

将您的代码划分为 View 层和业务逻辑更有意义。将业务逻辑放在单独的包或单独的服务中,并使用相同/共享的业务逻辑构建单独的 portlet 和独立应用程序。

关于java - 作为 Liferay Portlet 和 Servlet 的 Spring MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31860123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com