我有一个小问题。当我有一个包含一些字段的对象时,很容易通过表单传递这些字段:
控制器:
@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)
根据 Spring MVC 的工作方式,您不能使用字符串作为表单中的对象,您需要一个对象来封装该字符串,因为表单结构是对象,然后是链接到它的任何字段。
在您的情况下,我会为这些常见情况创建一个视图表单对象,例如带有 String 属性文本的 formView 。您可以在类似的情况下使用相同的对象。
如果您不想创建这个额外的对象,您可以选择通过 AJAX 发送数据,并构建数据数组以在 javascript 中发送到控制器。
就我个人而言,我会选择第一个选项,它更可重用。
希望这对您有帮助
| 归档时间: |
|
| 查看次数: |
9352 次 |
| 最近记录: |