簡體   English   中英

如何將 Spring mvc 控制器變量傳遞給 javascript

[英]How to pass Spring mvc controller variable to javascript

我試圖從一個對象中獲取一個 javascript 函數的變量,該對象將它發送給控制器查看。

我工作的對象是 Bpmsn。

在此處輸入圖片說明

通過控制器,我將對象注入到視圖中。

我的控制器方法是:

@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');
        }
    });

例如,我們可以將 Spring MVC 變量傳遞給 Javascipt:

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

存儲在模型中的 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)

希望它能解決你的問題。

這不起作用,因為var bpmnXML = ${bpmsn.textXML}; 僅在客戶端執行。

一種解決方案是,您可以引入一個帶有值${bpmsn.textXML}的屬性的隱藏字段,該屬性將在服務器端執行。 您將能夠在您的 javascript 中訪問此值(我將使用 jQuery 進行說明)。
例如

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM