我正在尝试从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;
}
答案 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按类型和名称将表单实体解析为控制器方法参数。这对我的意图来说有点不方便,但它可以获得我可以使用它的数据。