将Spring 3 MVC注释验证与Freemarker一起使用

问题描述

|| 我正在使用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一起使用?任何帮助将不胜感激。 谢谢, 黄朗     

解决方法

您的JSP代码可以在Freemarker中重写,如下所示:
<#import \"spring.ftl\" as spring />
...
<form id=\"worker\" action=\"${rc.getContextUrl(\'/admin/workerAdd\')}\" method=\"post\" > 
    <p>
        <label for = \"code\">Code</label>
        <@spring.formInput \"worker.code\" />
    </p> 
...
请注意,Freemarker的Spring库没有用于
form
的特殊元素,因此您需要使用普通的html
form
并将模型属性名称添加到各个字段的路径之前。 也可以看看: 16.4速度和FreeMarker     ,我想添加以下说明,以节省一些时间。 阅读文档时,它说除非您重写@ModelAttribute(value = ...),否则在您的视图中将以\“ command \”的身份访问该bean。 对于Freemarker(使用3.1M1测试),默认值为className(例如,如果Command类命名为\“ Change PasswordCommand \”,则默认情况下,该bean将绑定到changePasswordCommand。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...