[英]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.