确保在 StringTemplate 中转义 HTML 实体的最佳方法是什么

2023-12-01

假设有以下字符串模板,给出了 Java Bean 对象的列表:

<ul>$people:{p|<li>$p.name$ $p.email</li>}$</ul>

即人员列表可能包含Person您可能有能力或没有能力增强/扩展的对象:

class Person {
    ....
    public getName() { ... }
    public getEmail() { ... }
}

The getName() and getEmail()方法不会返回清理后的(转义的 html 实体)。你如何解决这个问题?


您可以使用自定义渲染器,例如:

public static class HtmlEscapeStringRenderer implements AttributeRenderer {
    public String toString(Object o, String s, Locale locale) {
        return (String) (s == null ? o : StringEscapeUtils.escapeHtml((String) o));
    }
}

然后在模板中表明您希望它转义:

$p.name;format="html"$

也就是说,您可能更喜欢在输入时清理数据、在发送到模板之前进行转换、将修饰过的人发送到模板等。


public class App {
    public static void main(String[] args) {
        STGroupDir group = new STGroupDir("src/main/resource", '$', '$');
        group.registerRenderer(String.class, new HtmlEscapeStringRenderer());

        ST st = group.getInstanceOf("people");
        st.add("people", Arrays.asList(
                new Person("<b>Dave</b>", "[email protected]"),
                new Person("<b>Nick</b>", "[email protected]")
        ));

        System.out.println(st.render());
    }

    public static class HtmlEscapeStringRenderer implements AttributeRenderer {
        public String toString(Object o, String s, Locale locale) {
            return (String) (s == null ? o : StringEscapeUtils.escapeHtml((String) o));
        }
    }
}

这输出:

<ul><li>&lt;b&gt;Dave&lt;/b&gt; [email protected]</li><li>&lt;b&gt;Nick&lt;/b&gt; [email protected]</li></ul>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确保在 StringTemplate 中转义 HTML 实体的最佳方法是什么 的相关文章

  • Android PhoneGap 插件,UI 选项卡栏,调整 WebView 大小

    我正在创建一个美味的 PhoneGap 插件 希望一旦它能被打开 准备好了 插件基本完成了 我只需要一个漂亮的用户界面 相互作用 简而言之 我想创建一个 本机 android 工具栏组件 如果您实现 PhoneGap UIControls
  • Java - 如何将特殊字符放入字符串中

    Java 似乎有很好的字符串处理能力 尽管如此 我还是遇到了最简单的问题 我需要动态字符串 它们在运行时更改 因此字符串类型不是一个好的选择 因为它们是不可变的 所以我使用字符数组 设置起来有点痛苦 但至少它们是可以修改的 我想创建一个字符
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 无法使用 json 架构验证器根据预定义的 yaml 文件验证查询参数

    我需要根据预定义的 yaml 文件架构验证查询参数的架构 因此我使用 json 架构验证器 验证如何失败 我正在执行以下步骤 填充参数和相应的架构 final List
  • Junit maven构建错误(maven-surefire-plugin:2.19.1:测试失败:分叉进程中出现错误)[重复]

    这个问题在这里已经有答案了 我通过引用创建了一个示例 struts 2 项目和 J unit 测试用例link http self learning java tutorial blogspot com au 2015 04 struts2
  • 请参阅 Java EE eclipse 调试中的 POST 参数

    我在调试 Java EE 方面没有经验 我更像是一个 javascript 人 我需要查看哪些 HTTP POST 参数到达服务器端 我在表单将其操作指向的 jsp 文件中放置了一个断点 现在我在调试变量窗口中找不到 POST 内容 他们在
  • 如何在 Eclipse 中使用其他外部 jar 依赖项创建不可运行/不可执行的 jar

    我无法通过 Eclipse 导出向导创建普通的 jar 不可运行 不可执行 它仅创建 jar 文件 但不会导出依赖的 jar 从而在从其他类调用导出的 jar 的方法时出现错误 请帮助 非常感谢 kurellajunior的建议 它是通过使
  • 如何将 Observable>> 转换为 Observable>

    我陷入了如何将以下可观察类型转换 转换为我的目标类型的困境 我有以下类型的可观察值 Observable
  • 发生错误。请参阅日志文件 - eclipse juno

    每当我启动 Eclipse Juno 时 都会出现错误 发生错误 请查看日志文件 C Program Files eclipse configuration 1362989254411 log 有的网站说卸载jdk重新安装 我这样做了 但没
  • 创建正则表达式匹配数组

    在Java中 我试图将所有正则表达式匹配返回到一个数组 但似乎您只能检查模式是否匹配某些内容 布尔值 如何使用正则表达式匹配来形成与给定字符串中的正则表达式匹配的所有字符串的数组 4城堡的回答 https stackoverflow com
  • 如何将 arraylist 从 servlet 传递到 javascript?

    我通过在属性中设置数组列表并将其转发到 jsp 来从 servlet 传递数组列表 Servlet ArrayList
  • 如何在Java媒体框架中学习.wav持续时间?

    我正在尝试使用 java 媒体框架将 mov 文件与 wav 文件合并 因此我需要知道它们的持续时间 我怎样才能做到这一点 任何想法 将不胜感激 您可以使用以下方式了解声音文件的持续时间 即 VitalyVal 的第二种方式 import
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • JavaFX - 为什么多次将节点添加到窗格或不同的窗格会导致错误?

    我现在正在学习基本的 JavaFX 我不明白我正在阅读的书中的这一说法 不 诸如文本字段之类的节点只能添加到一个窗格中一次 将节点添加到多次窗格或不同的窗格将导致运行时错误 我可以从书中提供的UML图看出它是一个组合 但我不明白为什么 库类
  • 如何初始化静态地图?

    你会如何初始化静态Map在Java中 方法一 静态初始化方法二 实例初始化 匿名子类 或者 还有其他方法吗 各自的优点和缺点是什么 这是说明这两种方法的示例 import java util HashMap import java util
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分
  • 防止Java实例化的正确方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在不同版本的Google App Engine中使用自定义域名?

    我使用谷歌应用程序引擎作为我的 Android 和 Web 应用程序的服务器 我使用 Android Studio 开发了 Android 应用程序 并使用 Eclipse 开发了 Web 应用程序 我在应用程序引擎中部署了两个版本 第一个

随机推荐

  • 如何通过php中的curl函数发布文件?

    我想编写一个自动发布表单的脚本 这不是垃圾邮件发送者 表单中有一个图片字段 我想用 php 并使用curl 函数编写脚本 如何实现文件上传 php 适合这个目的吗 我的意思是表单发布 要上传服务器上的文件 curl 可以做到这一点 你会想要
  • 将自定义 CSS 样式添加到模型表单 django

    我正在使用引导程序变体来帮助设计模型表单 我希望其中一个字段是某个类 并且我已经阅读了有关该主题的内容 普遍的共识是向 ModelForm 的元添加一个小部件 就像我在下面尝试的那样 forms py class EmailForm for
  • 如何更改 R 中的库位置? [复制]

    这个问题在这里已经有答案了 由于新的 R 2 11 版本 我想实施 Dirk 的建议here 因此 我要问 如何 永久 更改 R 的库路径 最好的解决方案是可以从 R 内部运行的解决方案 您可以编辑Rprofile in the base图
  • 按 varchar 列选择,条件中包含 IN() 部分,int 值返回所有行

    有人可以用这个查询解释一下为什么吗 SELECT FROM tags WHERE tag IN willa lentza 2016 它返回我的所有行tags表 但是当我把2016进入引号效果好吗 tag列是varchar type 示例环境
  • 如何在没有 P/Invoke 的情况下从 C# 创建挂起进程?

    WinAPI CreateProcess 具有标志 CREATE SUSPENDED 因此可以在执行某些操作之前将进程附加到 JobObject 然后为其主线程调用 ResumeThread 我发现寻找解决方案的唯一方法是这个帖子11年前写
  • Jquery,获取元素名称以给定字符串开头的元素

    如何使用 jquery 获取名称以 productElement 开头的所有输入文本元素 您使用属性以 开始选择器 name value 选择具有指定属性和值的元素 完全从给定的字符串开始 input name productElement
  • 为什么我的 head 选择中的 javascript 代码无法获取元素?

    我已经在 javascript 中研究 pi 计算器很长时间了 我终于完成了 问题是我的头部脚本 document getElementById button addEventListener click function alert Be
  • 媒体查询和设备方向变化

    我有下面的代码 我想要实现的是在移动设备的样式之间切换 将方向从纵向更改为横向 具有大分辨率的设备 如 iPhone 4 或 Galaxy S
  • 是否可以将tornado的gen.engine和gen.Task与twisted一起使用?

    我正在从事的项目都是用 Tornado 编写的 但我添加了一些 Twisted 来处理异步 XML RPC 我想知道您是否可以使用 Tornado 的 gen engine 并使用 Twisted 的代码生成 gen Task 这可能吗 如
  • 使用 jQuery 将每个字符包装在 except 标签中

    我试图将每个文本字符包装在 div div 带有跨度标签 没问题 只是我还需要保持嵌套标签不被修改 因此 如果 DIV 内的字符串是 Some random text b but b wait there s a href http w3
  • 使用 jquery 的改写模式 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何使我的输入字段就像键盘处于改写模式一样 当用户输入值但没有任何反应时 我尝试使用键盘
  • 如何复制结构并取消引用所有指针

    如何将 Item 结构和所有指针复制到新结构 type Item struct A ASet json a omitempty B BSet json b omitempty C CSet json c omitempty type ASe
  • 工作表中最后使用的单元格

    我是新来的 我希望使用 Excel VBA 返回工作表中最后使用的单元格 我看着使用 VBA 在 Excel 中查找上次使用的单元格时出错 但这并没有回答我遇到的两个问题 The Cells Find Row方法在我的代码中花费的时间太长
  • Svg - 文本元素的颜色背景/覆盖

    我刚刚开始使用 svg 并试图找出样式的局限性 我在 svg 中有一个 svg 文本元素 我的一些文本元素标记有 data editable true 我希望用户能够轻松地看到标记的元素是什么 我正在想象一个简单的 可切换的 半透明的覆盖层
  • 在SQL Server中合并一列中的每两行数据

    我的表结构是 Id UserId EventId 1 1 A 2 1 B 3 1 C 4 1 A 5 1 D 我需要的输出 UserId EventStart EventEnd 1 A B 1 B C 1 C A 1 A D 我希望每两行合
  • C# XML 在 xml 标签后插入注释到 XML

    我正在使用 C 对象来序列化 反序列化 XML 我想在序列化时向 XML 文件添加注释 该注释将是基本注释在标准 xml 标签之后 该注释不需要反序列化 它是一个基本注释 用于指示创建 xml 文件的产品和版本 可以直接序列化成新的X文档
  • 在 C# 中调用 SQL 连接方法

    我正在将此方法调用到我的登录表单 我不知道这有什么问题 我创建了一个名为 MyConnection 的类 该类包含我的 SQL ConnectionString 我想要的是我可以将此函数称为 ex 名为 Myfunction 的 Class
  • 在 Spring Rest 模板中设置超时

    应用程序正在使用 Spring Rest 模板来调用 Web 服务 我正在使用restTemplate exchange url 调用 Web 服务 目前我们没有为此 Web 服务调用传递任何超时值 我如何为 Spring Rest 模板设
  • 我如何使用Python脚本从网站获取pdf链接

    我经常需要从网站下载 pdf 文件 但有时它们不在一页上 他们在分页中划分了链接 我必须单击每一页才能获取链接 我正在学习 python 我想编写一些脚本 我可以在其中放置 web url 并从该网站提取 pdf 链接 我是 python
  • 确保在 StringTemplate 中转义 HTML 实体的最佳方法是什么

    假设有以下字符串模板 给出了 Java Bean 对象的列表 ul people p li p name p email li ul 即人员列表可能包含Person您可能有能力或没有能力增强 扩展的对象 class Person publi