我很难在Spring中定义一个包含HTML模板的字符串,即类似于以下内容的模板,而Spring却不接受它:
<bean class = "com.example.View">
<property name = "header">
<![CDATA[<p>
\t<h1>An example of header</h1>
\t<hr/>
</p>]]>
</property>
这在XML中通常是可能的,CDATA允许告知解析器要忽略的内容。但是,我无法在Spring XML中找到任何东西来将常量值定义为文本节点,而不是“ value”属性的内容(它们的XSD具有“”标记,但并非用于此目的)。而且,我希望将字符串解释为Java方式,即将'\ t'转换为tab。
我还阅读了其他有关XML引号的答案,例如<>(即使用'<>'),但是在上述情况下这是不切实际的,而且我不相信有没有更简单的解决方案。请注意,我已经知道我可以简单地将HTML发送到一个单独的文件中,并使用某种静态方法将后者读取为字符串,但是我正在考虑以下情况:我有很多这样的片段,我希望它们与Spring一起使用Bean配置。
答案 0 :(得分:0)
好的,正如@ M.Deinum在评论中所建议的(再次感谢),解决方案是简单地使用<value>
+ CDATA
:
<property name = "header">
<value><![CDATA[ Just a <b>test</b> value.}]]></value>
</property>
我最初尝试过,但是由于某种原因我无法重现,Spring(即对其架构的XML验证)抱怨<value>
在那个地方无效。
这允许直接编写\ t之类的内容,即在编辑文件时仅按Tab键即可。但是,可以结合使用SpEL和Apache的共同点来处理要明确说“ \ t”的情况:
<property name = "header">
<value><![CDATA[#{T(org.apache.commons.lang3.StringEscapeUtils).unescapeJava (
"\tJust a <b>test</b> value."
)}]]></value>
</property>
有点难看,但是可以用。