【问题标题】:ERROR: 'ContentNegotiatingViewResolver'of Spring 3.0.3 MVC Portlet+JSON错误:Spring 3.0.3 MVC Portlet+JSON 的“ContentNegotiatingViewResolver”
【发布时间】:2010-07-06 05:53:14
【问题描述】:

我想使用带有 JSON 支持的 DispatcherPortlet 类制作 Spring MVC 3.0.3 portlet。所以,我在 spring 上下文文件中添加了以下配置。

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">

文本/html

如果没有这个,如果我只使用“InternalResourceViewResolver”,那么它运行良好并且我能够使用 portlet。但是定义了这个bean后,我在tomcat启动时遇到了以下错误。

我四处搜索并找到一个链接,说明这个带有 JSON 的 bean 仅适用于最新春季版本中的 servlet。也请检查链接。

http://jira.springframework.org/browse/SPR-7344(portlet 的 JSON 问题...)

http://jira.springframework.org/browse/SPR-6932?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel#issue-tabs

另外请检查下面粘贴的错误。帮我... 谢谢。

:错误:

java.lang.IllegalArgumentException: Object of class [org.springframework.web.portlet.context.PortletRequestAttributes] must be an instance of class org.springframework.web.context.request.ServletRequestAttributes

请查看日志

 Caused by: java.lang.IllegalArgumentException: Object of class [org.springframework.web.portlet.context.PortletRequestAttributes] must be an instance of class org.springframework.web.context.request.ServletRequestAttributes
 at org.springframework.util.Assert.isInstanceOf(Assert.java:337)
 at org.springframework.util.Assert.isInstanceOf(Assert.java:319)
 at org.springframework.web.servlet.view.ContentNegotiatingViewResolver.resolveViewName(ContentNegotiatingViewResolver.java:363)
 at org.springframework.web.portlet.DispatcherPortlet.resolveViewName(DispatcherPortlet.java:1110)
 at org.springframework.web.portlet.DispatcherPortlet.render(DispatcherPortlet.java:1052)
 at org.springframework.web.portlet.DispatcherPortlet.doRenderService(DispatcherPortlet.java:761)
 at org.springframework.web.portlet.FrameworkPortlet.processRequest(FrameworkPortlet.java:522)

【问题讨论】:

标签: java json spring spring-mvc portlet


【解决方案1】:

ContentNegotiatingViewResolver 不适用于 portlet,只能用于 servlet。

作为一般规则,Spring 中的许多 servlet API 类都有一个等效的 portlet,例如

  • org.springframework.web.servlet.HandlerAdapter
  • org.springframework.web.portlet.HandlerAdapter

您必须确保使用正确的 API - servlet 和 portlet API 完全不兼容。

然而,自 Spring 2.5 以来,portlet 框架已被忽略(可能是因为它很少使用),并且 servlet MVC API 的更新部分未包含在 portlet MVC API 中。

似乎如果你想做你想做的事,你将不得不自己做很多事情。您也许可以从ContentNegotiatingViewResolver 和相关类中复制一些代码。

【讨论】:

  • 谢谢,我也找到了该错误的 jira 链接,但我不确定。现在我认为更好的是我创建一个返回 JSONObject 字符串并从 JSP 调用它的 servlet ...至少可以正常工作:) 有什么建议吗?
  • 我为 JSON 使用了单独的 servlet。并直接从 JSP 调用它......它返回完美的 json :D
【解决方案2】:

看看这个。它现在应该可以工作了



<!-- View Resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/test/testJSp/" />
    <property name="suffix" value=".jsp" />
      <property name="order" value="2" />
</bean>

【讨论】:

  • 这个问题是关于portlet,而不是servlet
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
相关资源
最近更新 更多