一個僞控制方法Spring MVC - JSTL標記JSON轉換行嗎?
@RequestMapping("/foo")
public String getFoo(Model model) {
model.add("foo", repo.findFoo());
model.add("bar", repo.findBar());
model.add("barOptions", repo.findBarOptions(bar));
return "fooView";
}
比方說,客戶端使用表達式語言來呈現foo
和bar
;但我們使用JavaScript來呈現barOptions
。
<html>
<script>
var options = <mytag:toJSON object="${barOptions}"/>;
$("#options").renderOptions(options);
</script>
<body>
<mytag:renderFoo foo="${foo}"/>
<mytag:renderBar foo="${bar}"/>
<ul id="options"></ul>
</body>
</html>
常見約定告訴我這是不好的。但MVC的本質,控制器發送數據和視圖決定如何使用它,告訴我這是好的。有沒有更好的方法來做同樣的事情?爲什麼這不常用?有什麼理由嗎?我可以使用單獨的調用請求JSON,但是隨後我必須提出更多的頁面加載請求,並且可能有邏輯根據頁面加載時的其他輸入確定控制器方法getFoo()
中的barOptions
。
我想要JSON的原因是重複使用相同的代碼來生成選項的查看方式(假設一個選項和它們的渲染比一個下拉菜單更復雜) - 當頁面加載時,我將首先繪製在JSP中的組件,然後當更新的東西,我用JS更新組件 - 這將是很好,如果我可以使用相同的邏輯,所以如果我改變它的呈現方式我不必修改JS選項組件渲染器和最初呈現組件的JSP – walnutmon
好吧,我現在明白你的觀點。 renderOptions函數不僅用於創建,還用於後續更改。這就是說,我認爲這似乎是一個優雅的方法。另外,正如您正確指出的那樣,模型和視圖仍然是分開的,並且被封裝在這個方法中。這個觀點是對模型中的數據採取行動,它如何作用於他的姐妹 - 模型和控制器不是一個問題。我也喜歡有一個負責將對象轉換爲json的自定義標籤的想法。我可能不得不採取那一個:) –