假设我们的杂货店网站需要发布了一份实时消息,并且我们希望我们的用户能够订阅它,因此我们创建了一个带有表单的 /WEB-INF/Templates/Subscribe.html 模板:
<form action="subscribe.html"> <fieldset> <input type="text" name="email" /> <input type="submit" value="Subscribe!" /> </fieldset> </form>
与 Thymeleaf 一样,这个模板开始时更像是一个静态 HTML 原型,而不是 Web 应用程序的模板。首先,我们表单中的 action 属性静态链接到模板文件本身,因此没有必要重写有用的 URL。其次,submit 按钮中的 value 属性使其以英语显示文本,但我们希望它是国际化的。
然后输入 th:attr 属性,使用该属性动态给 action 和 submit 按钮设置值,如下:
<form action="subscribe.html" th:attr="action=@{/subscribe}"> <fieldset> <input type="text" name="email" /> <input type="submit" value="Subscribe!" th:attr="value=#{subscribe.submit}"/> </fieldset> </form>
这个概念非常直接:th:attr 属性简单地接受一个表达式,为一个属性赋值(如:action 属性)。在创建了相应的控制器和消息文件后,处理这个文件的结果将如下:
<form action="/gtvg/subscribe"> <fieldset> <input type="text" name="email" /> <input type="submit" value="¡Suscríbe!"/> </fieldset> </form>
除了新属性值之外,您还可以看到应用程序上下文名称已自动添加到 /gtvg/subscribe 中的 URL基名前。
XML 规则不允许在一个标记中设置一个属性两次,因此,th:attr 属性将采用逗号分隔的赋值列表,如下所示:
<img src="../../images/gtvglogo.png" th:attr="src=@{/images/gtvglogo.png},title=#{logo},alt=#{logo}" />
引擎渲染后,输出:
<img src="/gtgv/images/gtvglogo.png" title="Logo de Good Thymes" alt="Logo de Good Thymes" />