【问题标题】:How to access Spring MVC model object in javascript file?如何访问 JavaScript 文件中的 Spring MVC 模型对象?
【发布时间】:2014-04-25 20:52:30
【问题描述】:

我正在使用 spring 3 MVC,并且我有以下课程。

外部系统会使用以下 URL 调用我的应用程序:

http://somehost/root/param1/param2/param3

我有一个spring MVC控制器方法如下:

public ModelAndView showPage(@PathVariable("param1") String paramOne, @PathVariable("param2") String paramTwo, @PathVariable("param3") String paramThree, HttpServletResponse response) {  
        SomeModel model = new SomeModel(paramOne, paramTwo, paramThree);
       return new ModelAndView("SomeJsp", "model", model);
    } 

SomeModel.java

public class SomeModel{
 private String paramOne;
 private String paramTwo;
 private String paramThree;
//constructor
 //setters and getters

}

SomeJsp.jsp

//In this Jsp i have a div with few elements. Div is not visible by default.
//This jsp has externalJavascript included.
//I enable div and set the data into div elements using jquery.
<script src="<c:url value="/resources/js/extjs.js" />" type="text/javascript"></script>

externalJs.js

$(document).ready(function() {

    //Here i need the model returned using ModelAndView
//I can get data from model and set into div elements.


});

在外部java脚本文件中,是否可以获取模型内容?如果可能,我该怎么做?

谢谢!

【问题讨论】:

  • &lt;script type="text/javascript"&gt;var myVar = "${model.paramOne}";&lt;/script&gt;

标签: java javascript jquery spring spring-mvc


【解决方案1】:
   @RequestMapping("/op")
   public ModelAndView method(Map<String, Object> model) {
       model.put("att", "helloooo");
       return new ModelAndView("dom/op");
   }

在你的 .js 中

<script>
    var valVar = [[${att}]];
</script>

【讨论】:

    【解决方案2】:

    在控制器中:

    JSONObject jsonobject=new JSONObject();
    jsonobject.put("error","Invalid username");
    response.getWriter().write(jsonobject.toString());
    

    在javascript中:

    f(data!=success){
    
    
    
     var errorMessage=jQuery.parseJson(data);
      alert(errorMessage.error);
    }
    

    【讨论】:

      【解决方案3】:

      这种方式可行,并且使用这种结构,您可以创建自己的框架并使用更少的样板来完成。

      抱歉,如果出现错误,我正在用手机写这篇文章

      Maven 依赖:

      <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>1.7.1</version>
      </dependency>
      

      Java:

      Person.java (Person 对象类)

      Class Person {
      
          private String name;
      
          public String getName() {
              return this.name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
      }
      

      PersonController.java (人员控制器)

      @RestController
      public class PersonController implements Controller {
      
          @RequestMapping("/person")
          public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
              Person person = new Person();
              person.setName("Person's name");
              Gson gson = new Gson();
      
              ModelAndView modelAndView = new ModelAndView("person");
              modelAndView.addObject("person", gson.toJson(person));
      
              return modelAndView;
          }
      }
      

      查看:

      person.jsp

      <html>
          <head>
              <title>Person Example</title>
              <script src="jquery-1.11.3.min.js"></script>
              <script type="text/javascript" src="personScript.js"></script>
          </head>
          <body>
              <h1>Person/h1>
              <input type="hidden" id="person" value="${person}">     
          </body>
      </html>
      

      Javascript:

      personScript.js

      function parseJSON(data) {
          return window.JSON && window.JSON.parse ? window.JSON.parse( data ) : (new Function("return " + data))(); 
      }
      
      $(document).ready(function() {
          var personJson = $('#person');
          person = parseJSON(personJson.val());
          alert(person.name);
      });
      

      【讨论】:

      • 能否请您对特别是在 JS 部分发生的魔法添加一些解释?
      • 我遵循这个..当我打印 personJson.val() -> 警报显示“{”时,我得到了 json 解析异常“未捕获的 SyntaxError:JSON 输入的意外结束”
      【解决方案4】:

      另一种解决方案可以在 JSP 中使用: <input type="hidden" id="jsonBom" value='${jsonBom}'/>

      并使用 jQuery 在 Javascript 中获取值:

      var jsonBom = $('#jsonBom').val();

      【讨论】:

        【解决方案5】:

        JavaScript 在客户端运行。您的模型在客户端不存在,它仅在您呈现 .jsp 时存在于服务器端。

        如果您希望模型中的数据可用于客户端代码(即 javascript),则需要将其存储在呈现页面的某个位置。例如,您可以使用您的 Jsp 编写 JavaScript,将您的模型分配给 JavaScript 变量。

        更新:

        一个简单的例子

        <%-- SomeJsp.jsp --%>
        <script>var paramOne =<c:out value="${paramOne}"/></script>
        

        【讨论】:

        • Aurand,您能否提供一些代码 sn-p 来回答您的问题?谢谢!
        • Aurand,现在我可以在同一个 jsp 中包含的外部 js 中访问 paramOne 了吗?
        • paramOne 是一个 JavaScript 变量。只需按名称访问即可。
        • 第一段让我大开眼界,让事情变得更加清晰。谢谢。
        • 我收到错误,暗示它将这个示例解释为正则表达式。一旦我做了&lt;script&gt;var JsParam = "${JavaParam}"&lt;/script&gt;(注意引号),它就起作用了。
        【解决方案6】:

        我最近也遇到了同样的需求。所以我尝试了 Aurand 的方式,但似乎代码缺少 ${}。所以 SomeJsp.jsp &lt;head&gt;&lt;/head&gt;里面的代码是:

        <script>
          var model=[];
          model.paramOne="${model.paramOne}";
          model.paramTwo="${model.paramTwo}";
          model.paramThree="${model.paramThree}";
        </script>
        

        请注意,您不能使用 var model = ${model} 进行分配,因为它会分配 java 对象引用。所以要在外部 JS 中访问它:

        $(document).ready(function() {
           alert(model.paramOne);
        });
        

        【讨论】:

          【解决方案7】:

          这是我如何使列表对象可用于 javascript 的示例:

          var listForJavascript = [];
          <c:forEach items="${MyListFromJava}" var="listItem">
            var arr = [];
          
            arr.push("<c:out value="${listItem.param1}" />");
            arr.push("<c:out value="${listItem.param2}" />");
          
            listForJavascript.push(arr);
          </c:forEach>
          

          【讨论】:

            【解决方案8】:

            您不能从 JavaScript 访问 java 对象,因为客户端没有对象。它只接收纯 HTML 页面(隐藏字段可以提供帮助,但它不是很好的方法)。

            我建议你使用ajax和@ResponseBody

            【讨论】:

            • Max,这里我不能进行ajax调用,因为控制器是从外部应用程序调用的,并且直接映射到控制器方法。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-05-12
            • 1970-01-01
            • 2019-03-03
            • 1970-01-01
            • 2019-05-17
            • 2019-07-10
            • 1970-01-01
            相关资源
            最近更新 更多