点击按钮,重新加载页面的一部分,刷新新网址上的整页

时间:2016-11-27 17:39:30

标签: javascript html ajax jsp spring-mvc

我正在撰写单页Spring MVC应用程序。

要求

  1. 我希望它根据输入的网址更改页面状态。
  2. 我希望它能够通过点击按钮来更改页面状态。
  3. 示例用例

    1. 如果我输入一个网址" my.site.com /",我只想加载我的网站骨架,而没有User的数据。 (User是我模型中的一个对象。)

    2. 如果我输入一个网址" my.site.com/users/John" ;,我想要" John"显示(页面可以重新加载)。

    3. 如果我输入字符串" John"在textbox和点击按钮Go!中,我只希望显示用户数据的页面部分刷新不是重新加载整个页面
    4. 设计问题:

      我理解,对于 1) 2),我需要返回一个新的ModelAndView对象,并且 3)我可以使用AJAX。这可能意味着我需要三种控制器方法。

      我不知道如何避免MVC和AJAX控制器方法之间的冲突的URL ,以及如何从Javascript实际调用我的AJAX控制器方法,以及不是ModelAndView控制器方法。

      代码示例:

      我需要的是这样的,除了这会导致冲突的网址

      /*
       * Default view.
       */
      @RequestMapping(value = "/users")
      public ModelAndView displayDefault() {
      
          return new ModelAndView("userdisplay_default.jsp");
      }
      
      /*
       * View for a specific user.
       */
      @RequestMapping(value = "/users/{username}")
      public ModelAndView displaySpecific(@PathVariable(value = "username") String username) {
          User user = new User(username);
      
          return new ModelAndView("userdisplay_specific.jsp", "Specific User", user);
      }
      
      /*
       * AJAX controller method.
       */
      @RequestMapping(value = "/users/{username}", produces = "application/json", method = RequestMethod.GET)
      public @ResponseBody User getTime(@PathVariable(value = "username") String username) {
          return new User(username);
      }
      

      在Javascript中,我会像这样获取POJO

      // obtain user
      var user = $('#user_input').val(); // this is a text input
      
      $.getJSON("/users/"+user, function() {
          //...
      });
      

      注意:我试图实现这一点的方式可能是错误的//不够//不是最佳的,所以请随意提出一些其他的方法来解决这个问题。

      请您给我一个解释以及一个代码示例,说明我需要完成的工作是什么?

1 个答案:

答案 0 :(得分:1)

您可以为控制器制作不同的方法。 例如: @RequestMapping(value = "/users")@RequestMapping(value = "/users/{username}") - 有GET方法。但对于AJAX make控制器使用POST:

@RequestMapping(value = "/users/{username}", produces = "application/json", method = RequestMethod.POST)

JS会像这样:

// Send the request
$.post("/users/"+user, data, function(response) {
    // Do something with the request
});

另一个建议(如果你的情况可能) - 重新命名你的网址。例如。在网址中添加单词api