2010-06-25 60 views
1

自定义视图:Spring MVC的AJAX和JSON使用自定义视图解析器,以及自定义视图

public class MyView extends AbstractView { 
    .... awesome stuff ... 
} 

控制器:

@RequestMapping(value="mylocation") 
public ModelAndView dosomething() { 
... 
    modelAndView.setView(new MyView()); 
    return modelAndView; 
} 

出于某种原因,这也不行。唯一的视图解析器我有以下内容:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:prefix="/WEB-INF/jsp/" 
      p:suffix=".jsp" > 
     <property name="exposedContextBeanNames"> 
      <list> 
       <value>spEnv</value> 
      </list> 
     </property> 
    </bean> 

此代码不起作用,因为它试图创建一些JSP视图基于...我不确定,我提交表单的路径;并有明显没有为它的JSP的看法,我很期待JSON进行实际返回,但由于某种原因,这是行不通的,它只是尝试转发我的一些JSP,所以我猜,我需要指定如何处理这个在我的XML ...但我已经看到了人们回归JSON约1000种不同的方式,和所有的人都非常困惑,我,我只是在寻找最简单的方法,这样我就可以把它从有

编辑:我添加了一个好的开始的答案,但它允许你在任何URL后键入“.json”,如果作为控制器我不期待它,它会做一些非常糟糕的事情,所以我需要以某种方式有这个视图解析器仅适用于固定的URL

回答

0

好了,终于想一百万的组合

@RequestMapping(value = "/test/data") 
    public TestFormData dostuff() { 
     TestFormData data = new TestFormData(); 
     data.setName("myname"); 
     return data; 
    } 

,然后这个

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="1"> 
     <property name="mediaTypes"> 
      <map> 
       <entry key="json" value="application/json"/> 
      </map> 
     </property> 
     <property name="defaultViews"> 
      <list> 
       <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 
      </list> 
     </property> 
    </bean> 

我真的不明白我怎么可以返回从这里对象...

但其实这虽然简单,但非常有用的是不能接受的因为那时我去我的网站的其他页面,而只是把一个任意“以.json”链接后,它抛出一个异常,让我的应用程序的用户太多的信息,所以基本上我需要找出一个办法只能在某些安全的控制器上拥有这种能力......

什么想法?