我们如何阅读有关spring mvc& amp; amp; amp; amp; MongoDB的

时间:2015-07-23 08:32:38

标签: java spring mongodb jsp spring-mvc

我正在尝试使用ajax调用使用spring mvc在mongodb上获得一个人的记录。

这是index.jsp中的ajax代码:

\begin{tabular}{llr}
\toprule
  &       &    IS\_FEMALE \\
\midrule
0 & count &              \\     % <-- note missing value here
  & mean &  1134.000000 \\
  & std &     0.554674 \\
...
...
  & 75\% &     0.000000 \\
  & max &     0.000000 \\
\bottomrule
\end{tabular}

这是PersonService类的get方法:

    $(document).on("click","a.edit",function(){
        var id=this.id;

        $.ajax({
            url:"edit.htm",
            data:{id:id},
            success:function(response){
                alert(response); 
            }
        });
    });

这是PersonController类中的ajaxEditPerson方法:

public Person getPerson(String id) {
    return mongoOperations.findOne( Query.query(Criteria.where("_id").is(id)),
                                Person.class,
                                COLLECTION_NAME) ;
} 

我想使用ETL在index.jsp中获取人员信息:

@RequestMapping(value = "/edit", method = RequestMethod.GET)
public @ResponseBody String ajaxEditPerson(
       @ModelAttribute Person person, 
       ModelMap model,
       @RequestParam(value="id") String id) {

      model.addAttribute("personOne", personService.getPerson(id));

     return "test";
}

但它不会向index.jsp发送响应。

我该如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:0)

Joram说你要归还String&#34; test&#34;到你的控制器

但是你应该返回personOne对象。

将您的方法更改为关注并确保您的项目在路径上有杰克逊或者手动配置json映射

@RequestMapping(value = "/edit", method = RequestMethod.GET,  produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Person ajaxEditPerson(
       @ModelAttribute Person person, 
       ModelMap model,
       @RequestParam(value="id") String id) {



     return personService.getPerson(id);
}

答案 1 :(得分:0)

您可以使用两种不同的技术。

  1. 使用jsp时,渲染会在服务器上进行。为了能够使用index.jsp,您需要从视图名称(在控制器中使用)到jsp文件的映射。
  2. 您可以将其放在servlet-xml

    <!-- Resolves view names to protected .jsp resources within the /WEB-INF/jsp directory -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    

    然后你将index.jsp放在/WEB-INF/jsp/index.jsp文件夹中 在你的控制器中,你有

    @RequestMapping(value = "/edit", method = RequestMethod.GET)
    public String ajaxEditPerson(
        @ModelAttribute Person person, 
        ModelMap model,
        @RequestParam(value="id") String id) {
    
        model.addAttribute("personOne", personService.getPerson(id));
    
        return "index";
    }
    

    @RequestMapping(value = "/edit", method = RequestMethod.GET)
    public String ajaxEditPerson(
        @ModelAttribute Person person, 
        ModelMap model,
        @RequestParam(value="id") String id) {
    
        model.addAttribute("personOne", personService.getPerson(id));
    
        return new ModelAndView("index", model);
    }
    
    在index.jsp中,您可以使用JSTL访问放在模型中的对象。

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
    <title>Person Object</title>
    </head>
    <body>
    This is a person Object.<br>
    Name: <c:out value="${personOne.name}"/>
    </body>
    </html>
    
    1. 正如Josef已经指出的那样,另一种方式(REST之类)是返回对象personOne的json字符串。然后在客户端,在浏览器中解释此json字符串,并使用在客户端浏览器上运行的javascript代码进行呈现。 您需要在服务器上使用json序列化程序将Person对象转换为json字符串。建议使用杰克逊。

      @RequestMapping(value =“/ edit”,method = RequestMethod.GET,produce = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody Person ajaxEditPerson(@RequestParam String id){     return personService.getPerson(id); }

    2. 在您的javascript AJAX调用中,您可以访问json字符串:

      $(document).on("click","a.edit",function(){
          var id=this.id;
      
          $.ajax({
              url:"edit",
              data:{id:id},
              success:function(response){
                  // response is an Object: json string of Person
                  alert(response.name); 
              }
          });
      });