如何将Freemarker模板中表单输入的数据导入spring MVC控制器?

时间:2015-03-17 16:14:55

标签: java spring-mvc freemarker

我正在尝试从freemarker模板生成的表单中接收简单的文本输入。正在调用正确的方法,但模型是空的,我希望它可以填充。

我在预先存在的应用程序的上下文中工作,或者我很久以前就抛弃了这个组合,并且直接进行了Spring MVC / JSP实现。

我已经浏览了网络上的每个教程,并且在stackoverflow中有很多关于这个主题的帖子,我仍然没有掌握一些东西。无论我缺少什么,都可能是如此基本,没有人愿意发布它。

应用程序中的示例不是很有用,因为它们构造有足够的间接性,我无法看到它们是如何工作的。

Freemarker模板

<#import "/spring.ftl" as spring />
  <@spring.bind "model"/>

<form name="model" method="post">
  <input type="text" name="user" id="user" value="${model.user}"/>

  <input type="hidden" id="submission" name="submission"/>
  <input type="submit" name="test" id="test" value="Test" onclick="document.getElementById('submission').value = 'test'"/>
</form>

控制器代码:

@RequestMapping(value = "/config", method = RequestMethod.POST)
public ModelMap postConfig(@ModelAttribute("model") ModelMap model) {
    logger.debug("User name was {}", model.get("user")); // Why is model empty here?

    return model;
}

1 个答案:

答案 0 :(得分:1)

最后,我无法使用ModelMap作为输入。我相信的原因是,虽然Spring有一百万种方法可以完成任何给定的任务,但是freemarker集成并不像jsp集成那样强大。

Spring有一个鲜为人知但广泛使用的特性,它通过名称将表单元素解析为方法参数。根据其他人的评论,我不相信它有很好的记录。但是,由于它是Grails框架上的Groovy的核心,我相信将其视为Spring的核心是安全的。

我最终使用的解决方案是:

@RequestMapping(value = "/config", method = RequestMethod.POST)
public ModelMap postConfig(String user) { 
    logger.debug("User name was {}", user); // Why is model empty here?

// ... snip ...
    model.put("user", user);
    return model;
}

Spring按类型和名称将表单实体解析为控制器方法参数。这对我的意图来说有点不方便,但它可以获得我可以使用它的数据。