java - 如何从 Freemarker 模板中的表单输入中获取数据到 spring MVC Controller 中?

标签 java spring-mvc freemarker

我正在尝试从由 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/

相关文章:

java - SimpleNLG 模型中的 TextSpec 不可用

java - Apache POI + JAVA + Excel 在单元格中添加值不起作用

java - FreeMarker 模板中处理错误的不同方法有哪些?

java - Freemarker:从不同位置加载模板

java - 我正在尝试通过 mac osx 上的 JDBC 连接 mysql

java - 在 PDE 构建属性文件中将源级别设置为 Java 8

spring - @Value 没有被注入(inject)到其他包中

java - 无法迭代 Jsp 中的列表

java - 使用 Spring 添加消息

java - JSoup 解析垃圾 Freemarker 标签