当用户单击百里香叶中的按钮时如何返回文件名?



这是一种粗略的方法,但我正在尝试获得这个 模型将"file"属性"file"放入PostMapping"getfile"中,以便当用户单击"提交"时,他们被定向到与该按钮关联的文件。

我看到很多网页告诉我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();
}

让我们来看看你的输入

<input type="text" th:field="*{fileName}" th:value="#{file.fileName}" th:text="${file.fileName}"/>

在表单提交时,您将在对象"filetobind"中名为"fileName"的属性中向控制器发送输入的值,这是因为您如何定义th:field和表单th:object,这很好。

现在,对于 th:value 部分以及为什么它不适合您: 语法#{...}用于外部化文件中的文本文字,以便您使 html 更"通用",引用文档:

外部化文本是从中提取模板代码片段 模板文件,以便它们可以保存在特定的单独文件中 (通常是 .properties 文件),并且它们可以轻松替换 通过用其他语言编写的等效文本(这个过程称为 国际化或简称 i18n)。外部化的文本片段 通常称为"消息"。

消息总是有一个识别它们的键,而百里香叶允许 指定文本应对应于特定消息 使用 #{...} 语法

因此,例如,这些对标签有好处,但对输入内容(输入值)不利。

现在,由于它是文本输入,因此您可以省略th:value部分并让用户填充输入,或者您可以使用语法${...}为其提供一个值,该语法访问从控制器传递的变量。引用文档:

${today} 表达式只是表示"获取今天调用的变量", 但是这些表达式可能更复杂(例如 ${user.name} "获取名为 user 的变量,并调用其 getName() 方法")。

更改th:value="${file.fileName}"的值,您应该没问题(只要您从控制器提供文件变量)。

最新更新