我正在努力尋找可以呈現部分的正確實現。目前,我希望在提交發布操作後呈現/更新部分內容。使用Spring MVC和Thymeleaf處理部分問題
因爲我來自.NET背景,在Spring MVC中我發現它非常困難。
使用ASP.NET MVC我可以有一個局部控制器,它會返回一個可以通過Ajax調用的局部視圖。 在Spring MVC中,似乎我需要Spring Webflow,並且看起來像使用百里香和應用程序的其餘部分設置一團糟。除了需要用xml編寫Spring Webflow之外。 我目前的寵物項目純粹是在Java配置
是否有更有效的替代方案?也許使用異步控制器之類的東西,或者可以模仿ASP.NET使用我喜歡的partials的東西。如果可能的話。 與Razor甚至Laravels Blade引擎相比,我確實發現Java視圖引擎非常薄弱。 Thymleaf肯定會朝着正確的方向發展,但他們管理分部和模板並不清楚和混亂。
我可能不知道它有多簡單,因此我想要一個很好的指導如何設置它。在視圖中使用Spring MVC我沒有真正的信心。
===================
編輯
爲了給什麼,我想實現一些代碼示例。
主要觀點:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorator="layout/master">
<head>
<meta charset="UTF-8"/>
<title>Manage Account</title>
</head>
<body>
<div layout:fragment="header"></div>
<div th:object="${account}" class="col-md-12" id="content" layout:fragment="body">
<section id="manage" class="col-md-8 col-md-offset-3">
<form id="manageForm" action="#" th:object="${account}" th:action="@{/account/user/account/{id}/manage/update(id=${account.getAccount().getId()})}" method="post">
<div id="accountDisplay" th:replace="account/accountDisplay">
</div>
<div class="form-group">
<button id="submit" class="col-md-2 btn btn-primary form-control" th:type="submit" value="Submit">Submit</button>
</div>
</form>
</section>
<div>
</div>
<script>
$().ready(function() {
var form = $("#mangeForm").serialize();
$('#submit').click(function (e) {
e.preventDefault();
acId = $('#acId').val();
updateView(form, acId);
});
function updateView(form, acId) {
$.ajax({
url: '/user/account/' + acId + '/manage/update',
data: form /* add other additional parameters */,
cache: false,
dataType: "json",
type: "POST",
success: function (data, textStatus, XMLHttpRequest) {
alert("success");
}
});
}
});
</script>
</div>
</body>
</html>
這是 「父」 頁,其中是調用部分
部分
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div id="accountDisplay" th:fragment="accountDisplay" class="col-md-6">
<input id="acId" class="form-control" type="hidden" th:field="${account.account.id}"/>
<div class="form-group">
<span>Name :</span> <span th:text="${account.getAccount().getName()}"></span>
</div>
<div class="form-group">
<label class="control-label" th:text="${account.getAccount().getBalance()}">Balance :</label>
<label class="control-label" th:for="${account.amount}">Amount :</label>
<input class="form-control" type="text" th:field="*{amount}"/>
</div>
</div>
</body>
</html>
現在這部分沒有被呈現時,問題是當我嘗試通過上面顯示的ajax調用進行調用時。
正在調用的控制方法有:
@RequestMapping(value = "/user/account/{id}/manage/update", method = RequestMethod.POST)
public String postTransaction(@ModelAttribute("account") final OperationObject account, BindingResult result, HttpServletRequest request) {
if (result.hasErrors()) {
return "redirect:/account/mange";
}
else {
System.out.println("New Thread Established");
Account thisAccount = accountService.findById(account.getAccount().getId());
thisAccount.withdraw(account.getAmount());
accountService.update(thisAccount);
return "redirect:account/accountDisplay";
}
}
@RequestMapping(value = "/user/account/{id}/manage/update", method = RequestMethod.GET)
public String updateManageView(@PathVariable Long id, Model model) {
Account account = accountService.findById(id);
model.addAttribute("Account", account);
return "account/accountDisplay";
}
我怎樣才能得到這個設置的工作?我錯過了什麼,應該使用哪些佈局/片段? 我希望這給了一些細節給我一個正確的援助。