2017-08-16 122 views
0

我对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}"> 

而这正是我试图在我的HTML文件thymeleaf:

<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:$ {}身份识别码

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

这甚至不是让控制器

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

回答

4

这不行,像这样。与所有服务器端技术一样,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一个对象,如果你想要使用*{...}语法。)

+0

感谢您的帮助!但是,我如何将HTML文件完全“链接”到模型对象? – gualizoe

+0

我不太清楚你在问什么。该对象必须是模型的一部分。有不同的方法来做到这一点。 – RoToRa

1

什么你将需要做的是两两件事:

第一项是需要绑定日:现场你输入,如:

<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"> 

将“object”替换为要保存的模型的变量名称。它应该在这之后继续工作。

相关问题