java - Spring XML,真的不是一种在字符串值中使用尖括号或反斜杠代码的方法吗?
问题描述
我很难在 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 中找不到任何东西来将常量值定义为文本节点,而不是“值”属性的内容(他们的 XSD 有一个“”标签,但不是为了这个目的)。此外,我希望字符串以 Java 方式解释,即 '\t' 被翻译成制表符。
我已经阅读了其他建议 XML 引用字符(例如 <> )的答案(即,使用 '<>'),但这在上述情况下根本不切实际,我不敢相信没有更简单的解决方案。请注意,我已经知道我可以简单地将该 HTML 发送到一个单独的文件并使用一些静态方法将后者读入一个字符串,但我正在考虑我有许多这些片段并且我希望它们与 Spring豆配置。
解决方案
好的,正如@M.Deinum 在评论中所建议的(再次感谢),解决方案就是使用<value>
+ CDATA
:
<property name = "header">
<value><![CDATA[ Just a <b>test</b> value.}]]></value>
</property>
我最初尝试过,但由于某种原因我无法重现,Spring(即他们的模式的 XML 验证)抱怨<value>
在那个地方无效。
这允许直接编写诸如 \t 之类的内容,即,只需在编辑文件时按 Tab 即可。但是可以结合 SpEL 和 Apache commons 来管理想要明确说 '\t' 的情况:
<property name = "header">
<value><![CDATA[#{T(org.apache.commons.lang3.StringEscapeUtils).unescapeJava (
"\tJust a <b>test</b> value."
)}]]></value>
</property>
有点难看,但有效。
推荐阅读
- google-chrome - 使用 Chrome --headless + cookies/oauth token 截取页面截图
- powerbi - 有没有办法使用变量创建度量以返回上个月 Power BI 或 DAX 中的基本大小
- python - 如何比较熊猫大数据框(python3.x)中的两个字符串?
- css - 在动画运行时禁用过渡
- xamarin - 为什么 Xamarin 绝对布局堆叠不尊重儿童顺序
- r - 将向量中多个值的每个实例替换为特定于唯一值的值
- amazon-web-services - AWS API Gateway HTTP 请求拦截器
- widget - 十月CMS | 有没有办法使用 Builder 中的文件上传小部件来使用富文本编辑器?
- dart - Dart:获取给定语言环境的货币代码
- xml - 隐藏每个组的编辑和删除按钮 Odoo 12