如何将Spring mvc控制器变量传递给javascript

时间:2017-02-01 19:44:18

标签: javascript spring spring-mvc

我试图从一个对象获取一个javascript函数的变量,该对象将它发送给控制器查看。

我工作的对象是Bpmsn。

enter image description here

通过控制器我将对象注入视图。

我的控制器方法是:

@RequestMapping(value = "/display")
public ModelAndView index2(@RequestParam int bpmsnId) {
    ModelAndView result;
    Bpmsn bpmsn;

    bpmsn = bpmsnService.findOne(bpmsnId);

    result = new ModelAndView("editor/display");
    result.addObject("bpmsn", bpmsn);

    return result;
}

我用这个方法来显示对象。

在jsp视图中,我注入了对象的属性,除了我将在javascript脚本中使用的textXML。

<div>
<ul>
    <li><b><spring:message code="bpmsn.ticker" />:</b> <jstl:out
            value="${bpmsn.ticker}" /></li>
    <li><b><spring:message code="bpmsn.title" />:</b> <jstl:out
            value="${bpmsn.title}" /></li>
    <li><b><spring:message code="bpmsn.summary" />:</b> <jstl:out
            value="${bpmsn.summary}" /></li>
    <li><b><spring:message code="bpmsn.authoredMoment" />:</b> <jstl:out
            value="${bpmsn.authoredMoment}" /></li>
    <li><b><spring:message code="bpmsn.likes" />:</b> <jstl:out
            value="${bpmsn.likes}" /></li>
    <li><b><spring:message code="bpmsn.dislikes" />:</b> <jstl:out
            value="${bpmsn.dislikes}" /></li>
</ul>

使用textXML属性我想创建一个javascript函数将xml导入到bpmn建模器中,但我不知道如何从javascript脚本中获取注入到视图中的对象的textXML属性

我试图在视图中调用该属性,但它不起作用

<script type="text/javascript">
    var bpmnXML = ${bpmsn.textXML}; //not work
    alert(bpmnXML)
    // BpmnJS is the BPMN viewer instance
    var viewer = new BpmnJS({
        container : '#canvas'
    });

    // import a BPMN 2.0 diagram
    viewer.importXML(bpmnXML, function(err) {
        if (err) {
            // import failed :-(
            alert('could not import BPMN 2.0 diagram', err);
        } else {
            // we did well!
            var canvas = viewer.get('canvas');
            canvas.zoom('fit-viewport');
        }
    });

3 个答案:

答案 0 :(得分:1)

存储在模型中的Java对象,无法在脚本中访问,因为它在客户端执行。

简单易用的解决方案是在JSON中序列化对象,将其添加到模型中,在Javascript中访问。

你需要这样的东西。

ObjectMapper objectMapper = new ObjectMapper();
result.addObject("bpmsn", objectMapper.writeValueAsString(bpmsn));

可以简单地在脚本中访问它。

var bpmnJsonString = '${bpmsn}';
Obj bpmn = JSON.parse(bpmnJsonString);
var bpmnXML = bpmn.textXML; 
alert(bpmnXML)

希望它能解决你的问题。

答案 1 :(得分:1)

例如,我们可以将Spring MVC变量传递给Javascipt:

 <script>
    var number = [[${number}]];
    var message = "[[${message}]]";
</script>

答案 2 :(得分:0)

这不起作用,因为var bpmnXML = ${bpmsn.textXML};仅在客户端执行。

一种解决方案是,您可以引入一个隐藏字段,其中包含值为${bpmsn.textXML}的属性,该属性将在服务器端执行。您将能够在javascript中访问此值(我将使用jQuery进行说明) 例如

<input id="bpmsn-textxml" type="hidden" data-textxml="${bpmsn.textXML}"/>

var bpmnXML = $("#bpmsn-textxml").data("textxml");