ОШИБКА: 'ContentNegotiatingViewResolver' из Spring 3.0.3 MVC Portlet + JSON - PullRequest
2 голосов
/ 06 июля 2010

Я хочу создать весенний портлет MVC 3.0.3 с использованием класса DispatcherPortlet с поддержкой JSON.Итак, я добавил следующую конфигурацию в контекстный файл Spring.

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

text / html

Без этого, если я использую только «InternalResourceViewResolver», тогда он работает нормально, и я могуиспользуйте портлет.Но с этим определенным bean-компонентом я получил следующую ошибку при запуске tomcat.

Я гуглил и нашел ссылку, утверждающую, что этот bean-компонент с JSON работает только с сервлетами в последней версии Spring.проверьте также и ссылку.

http://jira.springframework.org/browse/SPR-7344 (проблема 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)

Ответы [ 2 ]

2 голосов
/ 06 июля 2010

ContentNegotiatingViewResolver не работает с портлетами, только с сервлетами.

Как правило, многие классы API сервлетов в Spring имеют эквивалентный портлет, например,

  • org.springframework.web. сервлет .HandlerAdapter
  • org.springframework.web. портлет .HandlerAdapter

Вы должны убедиться, что используете правильный вариант - API сервлетов и портлетов полностью несовместимы.

Однако, начиная с Spring 2.5, инфраструктура портлетов игнорировалась (возможно, потому, что она используется очень редко), и более новые части API сервлета MVC не были включены в API портлета MVC.

Казалось бы, если вы хотите сделать то, что пытаетесь сделать, вам придется делать многое из этого самостоятельно. Вы можете скопировать часть кода из ContentNegotiatingViewResolver и связанных классов.

0 голосов
/ 30 мая 2011

Проверьте это. Теперь должно работать



<!-- 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>
...