views:

28

answers:

1

Hi,

I want to make spring MVC 3.0.3 portlet using DispatcherPortlet class With JSON support. So, i added following configuration in the spring context file.

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

text/html

Without this, if i use the 'InternalResourceViewResolver' only then it runs fine and i am able to use the portlet. But with this bean defined, i got the following error on tomcat startup.

I googled around and find a link stating that this bean with JSON only works with servlets in the latest spring vesion. please check the link as well.

http://jira.springframework.org/browse/SPR-7344 (JSON issue for portlets...)

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

Also please check the error pasted below. Help me... thanks.

:ERROR:

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

please check the log

 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)
+1  A: 

ContentNegotiatingViewResolver doesn't work with portlets, only servlets.

As a general rule, many servlet API classes in Spring have a portlet equivalent, e.g.

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

You have to make sure that you use the right one - the servlet and portlet APIs are completely incompatible.

However, since Spring 2.5, the portlet framework has been neglected (probably because it's very rarely used), and newer parts of the servlet MVC API have not been included in the portlet MVC API.

It would seem that if you want to do what you're trying to do, you're going to have to do a lot of it yourself. You might be able to copy some of the code from ContentNegotiatingViewResolver and related classes.

skaffman
thanks, i found the jira link for the bug also but i was not sure. Now i think its better i create a servlet returning JSONObject string and calling that from the JSP... atleast that works fine :)any suggestions?
Paarth
i have used separate servlet for JSON. And called it from JSP directly ...its returning perfect json :D
Paarth