首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Spring 3 MVC注释验证与Freemarker结合使用

将Spring 3 MVC注释验证与Freemarker结合使用
EN

Stack Overflow用户
提问于 2011-05-26 18:32:53
回答 2查看 5.5K关注 0票数 2

我使用的是Spring3MVC注释验证。我知道如何在JSP语言中实现它(在JSP语言中使用modelAttribute属性),但是我不知道如何在Freemarker中应用这种数据绑定。

JSP等价性的示例

代码语言:javascript
复制
<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>
...

控制器示例:

代码语言:javascript
复制
@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进行绑定,但我仍然没有找到它。

代码语言:javascript
复制
<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一起工作?任何帮助都将不胜感激。

谢谢,

黄龙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-26 18:56:31

您可以在Freemarker中重写JSP代码,如下所示:

代码语言:javascript
复制
<#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> 
...

请注意,Spring library for Freemarker没有特定的form元素,因此您需要使用普通的html并在每个字段的路径前添加form属性名称。

另请参阅:

  • 16.4 Velocity & FreeMarker
票数 3
EN

Stack Overflow用户

发布于 2011-06-28 04:34:09

为了节省大家的时间,我想补充以下几点。在读取文档时,它显示除非您重写@ModelAttribute(value=...)在您的视图中,该bean将作为“命令”进行访问。

对于Freemarker (使用3.1M1测试),缺省值是changePasswordCommand (例如,如果className类被命名为"Change PasswordCommand",那么该bean将默认绑定到Freemarker。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6137153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档