如何只传递百万美元形式的字符串?

时间:2017-01-04 15:43:28

标签: spring thymeleaf

我有点问题。当我有一个包含某些字段的对象时,很容易通过表单传递这些字段:

控制器:

@RequestMapping("/")
public String hello(Model model) {
    model.addAttribute("test", Test);
    return "index";
}

HTML:

<form th:action="@{/process}"  method="post" th:object="${test}">
<input type="text" th:field="*{value}"/>
<input type="submit" />
</form>

但是如果我不想拥有一个对象而只传递字符串呢?这样的事情:

控制器:

@RequestMapping("/")
public String hello(Model model) {
    model.addAttribute("test", "test string");
    return "index";
}

HTML:

<form th:action="@{/process}"  method="post">
<input type="text" th:field="${test}"/>
<input type="submit" />
</form>

不起作用。 谢谢你的帮助!

对于评论中的下一个问题:

的index.html:

<form th:action="@{/process}"  method="post">
<textarea th:text="${sourceText}"/>
<input type="submit" />

ggg.html:

<textarea th:text="${sourceText}"/>

控制器:

@RequestMapping("/")
public String hello(Model model) {
    model.addAttribute("sourceText", "asdas");
    return "index";
}

@RequestMapping("/process")
public String process(Model model, @ModelAttribute(value = "sourceText") String sourceText) {
    return "ggg";
}

2 个答案:

答案 0 :(得分:1)

根据Spring MVC的工作原理,您不能将字符串用作表单中的对象,您需要一个对象来封装该字符串,因为表单结构是Object,然后是链接到它的任何字段。

在你的情况下,我会为那些常见情况创建一个视图表单对象,比如带有String属性文本的formView。并且您可以在类似的情况下使用相同的对象。

其他选项如果您不想创建这个额外的对象,您可以通过AJAX发送数据,并构建数据数组以通过javascript发送到控制器。

就我个人而言,我会选择第一种选择,更可重复使用。

希望这能帮到你

答案 1 :(得分:0)

th:field仅在声明像th:object之类的对象时使用。

<form th:action="@{/process}"  method="post">
<input type="text" th:value="${sourceText}" name="sourceText"/>
<input type="submit" />
</form>

Spring通过“ name”属性匹配值。只需在控制器中使用@RequestParam捕获它,如

@RequestMapping("/process")
public String process(Model model, @RequestParam String sourceText) {
    return "ggg";
}