Я использую Spring 3 MVC Annotation Validation. Я знаю, как это сделать в JSP (используя свойство modelAttribute
в JSP), но я понятия не имею, как применить этот тип привязки данных в 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? Любая помощь будет оценена.
Спасибо
Хоанг Лонг