这是一种粗略的方法,但是我正在尝试获取它 将模型属性“文件”添加到PostMapping“获取文件”中,以便当用户单击“提交”时,它们将定向到与该按钮关联的文件。
我看到许多网页告诉我th:value会将所需的文本插入到表单字段中……这对我不起作用。
最后,我只是尝试将用户发送到他们单击的文件。
模板:
<table>
<tr><th>File Name</th>
</tr>
<tr th:each="file : ${filedata}">
<td>
<form action="#" th:action="@{~/home/ebay/getfile}" method="post" th:object="${filetobind}">
<!-- th:field maps to object -->
<input type="text" th:field="*{fileName}" th:value="#{file.fileName}" th:text="${file.fileName}"/>
<input type="submit" value="Get" />
</form>
</td>
</tr>
</table>
控制器:
@GetMapping(Mappings.FILES)
public String getDirectory(Model model){
model.addAttribute(AttributeNames.FILE_DATA, fileService.getDirectory());
model.addAttribute(AttributeNames.FILE, new DirectoryFile());
// debug
System.out.println("#############################################################");
for(DirectoryFile file : fileService.getDirectory()){
System.out.println(file.getFilePath());
}
System.out.println("#############################################################");
return ViewNames.DIRECTORY;
}
@PostMapping("getfile")
public String getFile(Model model, @ModelAttribute(AttributeNames.FILE) DirectoryFile file ){
System.out.println("Filepath:" + file.getFileName());
//model.addAttribute(AttributeNames.FILE, file.getFileName().trim());
return "data/" + file.getFileName();
}
答案 0 :(得分:0)
让我们看看您的输入内容
<input type="text" th:field="*{fileName}" th:value="#{file.fileName}" th:text="${file.fileName}"/>
提交表单时,您正在将对象的“ filetobind”内部名为“ fileName”的属性的输入值发送给控制器,这是由于您定义th:field
和表单{{1} },这很好。
现在,对于th:value部分以及为什么它对您不起作用:语法th:object
用于外部化文件中的文本文字,因此您可以使html更加“泛型”,引用文档:
外部化文本是从中提取模板代码的片段 模板文件,以便可以将它们保存在特定的单独文件中 (通常是.properties文件),并且可以轻松替换它们 用其他语言写成的等价文字(称为“ 国际化或简称为i18n)。外在的文本片段 通常称为“消息”。
消息始终具有用于识别消息的密钥,而Thymeleaf允许 您可以指定文本应与特定消息相对应 使用#{...}语法
例如,那些标签很适合标签,但不适用于输入内容(输入值)。
现在,由于它是文本输入,因此您可以省略#{...}
部分,让用户填充输入,也可以使用语法th:value
为它提供一个值,该值可以访问变量从控制器传递。引用文档:
$ {today}表达式仅表示“获取今天的变量”, 但是这些表达式可能更复杂(例如$ {user.name} “获取名为user的变量,并调用其getName()方法”。
更改${...}
的值,就可以了(只要您从控制器提供了文件变量即可)。