Spring XML,不是真的在字符串值中使用尖括号或反斜杠代码的方法吗?

时间:2018-10-10 12:31:23

标签: java spring

我很难在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配置。

1 个答案:

答案 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>

有点难看,但是可以用。