当用户单击Thymeleaf中的按钮时,如何返回文件名?

时间:2019-06-02 17:34:12

标签: thymeleaf

这是一种粗略的方法,但是我正在尝试获取它 将模型属性“文件”添加到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();
    }

1 个答案:

答案 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()方法”。

更改${...}的值,就可以了(只要您从控制器提供了文件变量即可)。