Thymeleaf里面[if mso]

时间:2016-11-22 05:33:17

标签: java css spring thymeleaf

我正在使用spring thymeleaf制作电子邮件模板。我需要在模板中包含MS-outlook [if mso]的检查。我需要在块内设置一个变量。我想知道是否有办法做到这一点。

<!--[if mso]><p style="line-height:0;margin:0;">&nbsp;</p><v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" th:href="@{|${baseUrl}/#/signup?email=${registrationRequest.email}&amp;key=${registrationRequest.registrationToken}|}" style="width:124px" arcsize="8%" strokecolor="#339561" filled="t"><v:fill type="gradient" angle="180" color="#44C781" color2="#3AA96E"></v:fill><v:textbox style="mso-fit-shape-to-text:t" inset="0px,11px,0px,11px"><center style="font-size:14px;line-height:24px;color:#FFFFFF;font-family:Tahoma,sans-serif;font-weight:bold;mso-line-height-rule:exactly;mso-text-raise:4px">Register</center></v:textbox></v:roundrect><![endif]-->

3 个答案:

答案 0 :(得分:2)

您可以通过变量提供整个MS Outlook特定的HTML代码块,包括特殊的开始和结束注释,但这样做会删除Thymeleaf在该块中执行变量替换的能力。

通过使用两个变量而不是一个变量,可以非常轻松地实现保留变量替换:启动MSO注释变量和结束MSO注释变量 - 这些变量分别只生成MSO和结束MSO注释。

将Outlook特定代码保留在模板中并将其包装在开头/结尾标记中,如下所示:

<div class="col-md-3">
                 @Html.TextBox("ddlUser", null, new { @id = "ddlUser", @class = "form-control" })
             </div>

答案 1 :(得分:0)

我通过在服务器端移动整个[if mso]块解决了这个问题。我附加了所需的变量,并使用

在模板中渲染了块
<div th:remove="tag" th:utext="${msoTemplate}"></div>   

答案 2 :(得分:0)

我认为使用if mso伪注释的更好方法是使用th:block

<th:block th:utext="${ifgtemso9}"></th:block>
.. your html ...
<th:block th:utext="${endif}"></th:block>

当您设置模型或上下文时,您可以执行以下操作:

ctxEmail.setVariable("ifgtemso9","<!--[if gte mso 9]>");
ctxEmail.setVariable("ifnotmso15comment","<!--[if !mso 15]><!-->");
ctxEmail.setVariable("endif","<!--<![endif]-->");
ctxEmail.setVariable("endif_end","<![endif]-->");

然后在utext中使用相应的变量。

(我在这里直接用上下文调用百里香,但我相信你知道如何自己设置模型参数)