使用Thymeleaf的复杂th:attr字段

时间:2015-03-21 03:04:37

标签: thymeleaf

我有一个Thymeleaf模板,其中包含相当复杂的data-属性,如下所示:

<div data-dojo-props="required: true, placeholder:'Foo bar baz', more: stuff" ...>

我想让Thymeleaf像这样提供占位符:

<div th:data-dojo-props="placeholder:'#{foo.bar.baz}'" ...>

当然,它不起作用。我应该这样使用th:attr

<div th:attr="data-dojo-props=placeholder:'#{foo.bar.baz}'" ...>

哪个也行不通。只要您在:中添加'th:attr,模板就会中断。我也试过逃避它们,例如\:\',并尝试使用HTML实体,例如&38;,但也没有用。

所以我尝试了th:prependattrth:appendattr

<div th:prependattr="data-dojo-props=placeholder:'"
     th:attr="data-dojo-props=#{foo.bar.baz}"
     th:appendattr="data-dojo-props='"
...>

但他们也无法处理:',也无法逃避:

<div th:prependattr="data-dojo-props=placeholder&58;&39;"
     th:attr="data-dojo-props=#{foo.bar.baz}"
     th:appendattr="data-dojo-props=&39;"
...>

任何使我失踪的工作的方法?

1 个答案:

答案 0 :(得分:2)

您可以在Thymeleaf消息属性中使用参数,例如:

<强> Messages.properties:

dojo.props=required: {0}, placeholder: {1}, more: {...}
dojo.props.required=true
dojo.props.placeholder=Foo bar baz

包含邮件属性的HTML:

<div th:attr="data-dojo-props=#{dojo.props(#{dojo.props.required}, #{dojo.props.placeholder})}"></div>

或者,如果您想从对象中获取值:

<div th:attr="data-dojo-props=#{dojo.props(${dojo.props.required}, ${dojo.props.placeholder})}"></div>

即使选择器工作:

<div th:attr="data-dojo-props=#{dojo.props(*{dojo.props.required}, *{dojo.props.placeholder})}"></div>