我正在使用 Spring 3 MVC 注释验证。我知道如何在 JSP 中做到这一点(在 JSP 中使用modelAttribute
属性),但我不知道如何在 Freemarker 中应用这种数据绑定。
JSP 等价示例
<c:url var="addUrl" value="/admin/workerAdd" />
<form:form modelAttribute="worker" action="${addUrl}" method="post">
<p>
<form:label for="code" path="code">Code</form:label>
<form:input path="code" readonly="false" />
</p>
...
控制器示例:
@Controller
@RequestMapping("/admin/*")
public class AdminController {
@Autowired
private CommonService commonService;
/**
* For every request for this controller, this will
* create a person instance for the form.
*/
@ModelAttribute
public Worker newRequest(@RequestParam(required=false) String id) {
return (id != null ? commonService.getWorkerById(id) : new Worker());
}
@RequestMapping(value="/workerAdd", method=RequestMethod.POST)
public final String performAddUser(@Valid Worker worker, BindingResult result) throws Exception {
if (result.hasErrors()) {
return null;
}
// Create the worker here.
return "redirect:/administration/manageUser";
}
现在我想使用相同的控制器,但视图是由 Freemarker(ftl) 编写的。我下面的 freemarker 中的数据绑定不起作用(这是可以理解的,因为它应该有不同的语法)。我做了一些研究并了解了 FTL 中的命令对象,但我不明白这一点。我认为它应该是一个类似的属性,告诉 Spring 进行绑定,但我仍然没有找到它。
<form id="worker" modelAttribute="worker" action="${rc.getContextUrl('/admin/workerAdd')}" method="post" >
<div class="Entry">
<label for="code">Code</label>
<input type="text" id="code" name="code" value="${worker.code}" />
</div>
是否有任何简单的方法可以使这种注释验证方式(以及数据绑定)与 FTL 一起使用?任何帮助将不胜感激。
谢谢,
黄龙