如何仅以百里香叶形式传递字符串?

Hel*_*sze 7 spring thymeleaf

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

控制器:

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

html:

<form th:action="@{/process}"  method="post" th:object="${test}">
<input type="text" th:field="*{value}"/>
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

但是如果我不想有一个对象并且只传递字符串怎么办?类似的东西:

控制器:

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

html:

<form th:action="@{/process}"  method="post">
<input type="text" th:field="${test}"/>
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

不起作用。感谢帮助!

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

索引.html:

<form th:action="@{/process}"  method="post">
<textarea th:text="${sourceText}"/>
<input type="submit" />
Run Code Online (Sandbox Code Playgroud)

ggg.html:

<textarea th:text="${sourceText}"/>
Run Code Online (Sandbox Code Playgroud)

控制器:

@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";
}
Run Code Online (Sandbox Code Playgroud)

小智 8

th:field 仅在您声明像 th:object 这样的对象时使用。

<form th:action="@{/process}"  method="post">
<input type="text" th:value="${sourceText}" name="sourceText"/>
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

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

@RequestMapping("/process")
public String process(Model model, @RequestParam String sourceText) {
    return "ggg";
}
Run Code Online (Sandbox Code Playgroud)


cra*_*aro 4

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

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

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

就我个人而言,我会选择第一个选项,它更可重用。

希望这对您有帮助