我正在尝试从由 freemarker 模板生成的表单接收简单的文本输入。正在调用正确的方法,但模型是空的,我希望它被填充。
我在一个预先存在的应用程序的上下文中工作,否则我早就将这种组合扔到一边,直接转向 Spring MVC/JSP 实现。
我已经浏览了网络上的所有教程,以及 stackoverflow 中关于这个主题的许多帖子,但我仍然无法掌握一些东西。我遗漏的任何内容都可能非常基础,以至于没有人愿意发布它。
应用程序中的示例不是很有用,因为它们是用足够的间接构造的,我根本看不到它们是如何工作的。
自由标记模板
<#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>
Controller 代码:
@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;
}
最佳答案
最后,我无法使用 ModelMap 作为输入。我认为原因在于,虽然 Spring 有上百万种方法来完成任何给定任务,但 freemarker 集成不如 jsp 集成强大。
spring 有一个鲜为人知但广泛使用的特性,它通过名称将表单元素解析为方法参数。根据其他人的评论,我认为它没有得到很好的记录。但是,由于它是 Groovy on Grails 框架的核心,我相信将它视为 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 通过类型和名称将表单实体解析为 Controller 方法参数。这对我的意图来说有点不方便,但它会在我可以使用它的地方获取数据。
关于java - 如何从 Freemarker 模板中的表单输入中获取数据到 spring MVC Controller 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29104261/