Thymeleaf:将输入文本作为表单操作中的参数传递

时间:2017-08-16 14:17:55

标签: java rest thymeleaf

我对Thymeleaf很新,所以我在努力解决这个问题。

我想在提交表单时将参数传递给控制器​​,并带有文本字段的值。

这是我的控制者:

@PostMapping("/postEndpoint/{myid}")
public String pidUserSubmit(@PathVariable(value = "myid") String myid) {
    log.debug("*** MY ID: {}", myid);
    return "redirect:/someOtherPage";
}

这就是我定义文本输入的方式:

<input id="myid" name="myid" type="text" maxlength="26" title="Please enter a valid ID" class="texter" th:value="*{myid}">

这就是我在mymeleaf的html文件中尝试的内容:

<form name="myform" id="myform" action="#" th:action="@{/postEndpoint/__${myid}__}" method="post">

我收到此日志:     ***我的ID:null

<form name="myform" id="myform" action="#" th:action="@{/postEndpoint/${myid}}" method="post">

我收到此日志:     ***我的ID:$ {myid}

<form name="myform" id="myform" action="#" th:action="@{/postEndpoint/{myid}(myid=${myid})}" method="post">

这甚至没有进入控制器

任何帮助将不胜感激! :)

2 个答案:

答案 0 :(得分:6)

这不是这样的。与所有服务器端技术一样,Thymeleaf模板在发送给用户之前执行,因此无法知道用户将输入的内容并将其插入action属性。

您可以使用JavaScript执行类似操作,但使用常规HTML表单会更容易。这要求您不要在控制器中使用路径变量,而是使用请求参数:

@PostMapping("/postEndpoint")
public String pidUserSubmit(@RequestParam(name = "myid") String myid) {
    log.debug("*** MY ID: {}", myid);
    return "redirect:/someOtherPage";
}
<form th:action="@{/postEndpoint}" th:object="${mymodelobject}">
  <input name="myid" type="text" th:value="*{myid}">
</form>

(如果您想使用th:object语法,请不要忘记将myid与具有属性*{...}的对象一起使用。)

答案 1 :(得分:1)

您需要做的是两件事:

第一项是你需要将th:field绑定到你的输入,如:

<input id="myid" name="myid" type="text" maxlength="26" title="Please enter a valid ID" class="texter" th:field="*{myid}" th:value="*{myid}">

您还希望更改表单发布到按对象保存的方式。这将是这样的:

<form name="myform" id="myform" action="#" th:action="@{/postEndpoint/(object)}" th:object="${object}" method="post">

替换&#39;对象&#39;使用您要保存的模型的变量名称。这一切都应该在此之后发挥作用。