5.1 设置任何属性的值

假设我们的网站发布简讯,并且我们想要用户能够订阅。于是,我们创建了一个带有表单的/WEB-INF/templates/subscribe.html模版:

  1. <form action="subscribe.html">
  2. <fieldset>
  3. <input type="text" name="email" />
  4. <input type="submit" value="Subscribe!" />
  5. </fieldset>
  6. </form>

对Thymeleaf来说,这个模版更像是静态原型,而不是一个网络应用的的模版。首先,我们表单里的action属性静态地链接到了模版文件自身,所以没有地方留给有用的URL重写。其次,提交按钮里的value属性使按钮显示为英文文本,但是我们想要使其国际化。

输入th:attr属性,它可以改变标签的属性值:

  1. <form action="subscribe.html" th:attr="action=@{/subscribe}">
  2. <fieldset>
  3. <input type="text" name="email" />
  4. <input type="submit" value="Subscribe!" th:attr="value=#{subscribe.submit}"/>
  5. </fieldset>
  6. </form>

概念相当简单:th:attr简单地接受一段表达式,此表达式将一个值赋值给一个属性。已经创建了相应的控制器和信息文件的话,处理这个文件将得到:

  1. <form action="/gtvg/subscribe">
  2. <fieldset>
  3. <input type="text" name="email" />
  4. <input type="submit" value="¡Suscríbe!"/>
  5. </fieldset>
  6. </form>

除了新的属性值,你还可以看到应用上下文名已经自动加上了前缀,变成了/gtvg/subscribe。这在之前的章节有讲到。

但是,要是我们想要一次设置多个属性,该怎么办呢?XML规则不允许❎在一个标签里设置一个属性两次。所以th:attr将会接受一个逗号分隔的赋值列表,就像:

  1. <img src="../../images/gtvglogo.png"
  2. th:attr="src=@{/images/gtvglogo.png},title=#{logo},alt=#{logo}" />

提供需要的信息后,这将会输出:

  1. <img src="/gtgv/images/gtvglogo.png" title="Logo de Good Thymes" alt="Logo de Good Thymes" />