Java HTML Builder(反模板)库? [关闭]

Posted

技术标签:

【中文标题】Java HTML Builder(反模板)库? [关闭]【英文标题】:Java HTML Builder (anti-template) library? [closed] 【发布时间】:2011-04-04 18:33:42 【问题描述】:

我一直在寻找能够轻松创建有效 (X)html sn-ps 的现代 Java 库。

是的,您可以使用模板语言,但有时您不想这样做,因为与插入您最喜欢的模板语言相比,Java 有一些优势。

我在许多项目中看到了很多内部 HTML 构建器,但我找不到 Commons-HTML 构建器。

有人知道吗?

如果它利用 Java 5/6/7 类型系统(泛型)并支持 Fluent Style,那将是理想的选择。 或者类似 fluent 风格的东西,即 JQuery 风格链接,或者用于模拟 JMock 等库的状态机(学究式地说是 Monad)。

一个粗略的构建器示例可能是:

new Html().title("stuff").body().in().div().in().h1("Hello World").hr();

另一个例子: http://codemonkeyism.com/the-best-markup-builder-i-could-build-in-java/

最后我自己写了:Java Anti-template Language (JATL)

【问题讨论】:

另一种选择是使用 JAXB 的 Fluent Plugin 【参考方案1】:

我最终编写了自己的库,名为 Java Anti-template Language (JATL)

【讨论】:

看起来不错,还在更新吗? 是的。我需要尽快添加 HTML 5。可能会在几周内添加它。它现在也在公共 maven 存储库中。 干得好!如果内部元素可以进入构造函数内部会更好:body(h1(), div(table(...))) @XieJilei 是的,我正在考虑在主要版本中为喜欢 lisp 风格的 S 表达式的人添加它。朝着这个方向发展存在一些评估挑战(即,您希望在 h1 标记之前写入正文标记......否则您将不得不缓冲整个文档)。 @ed22 是的,与这些拥有精美网页的新孩子相比,JATL 看起来已经过时了 :) 。 j2html 看起来它不是流式传输的,因此如果您使用大型文档,它可能会出现内存问题(请参阅我之前关于 S 表达式的 cmets)。 rendersnake 看起来与 JATL 非常相似,尽管它具有更好的代码生成器和类型的使用,但却失去了简单性和可扩展性。有趣的是,我现在更多地将 JATL 用于非 HTML 标记(即 XML),这两个较新的库似乎都不支持。【参考方案2】:

您尝试过Jakarta Element Construction Set (ECS) 项目吗?

它并不是一个真正流畅的 API - 让我想起 StringBuilder 而不是 Mockito...但在功能上我认为它是你所追求的。

【讨论】:

这绝对是朝着正确方向迈出的一步(+1) 我认为我们有一个赢家。多么可怕的不友好的 SEO 项目名称 :) 你的权利可能不是很流利,因为它涉及状态机。如果有的话,它实际上更像是一个 Monad。想想 JQuery。 它对我来说仍然很笨重并且不支持 XHTML。 现在已经不再开发了。【参考方案3】:

您最好的选择可能是使用 XML 库并将输出呈现为 HTML。

I.E. Dom4J 为特定于 HTML 的 XML 输出定义了一个 HtmlWriter 类。

但您仍然必须在其之上创建自己的 api 才能实际创建文档。

【讨论】:

Dom4J 的恼人问题是它缺乏对泛型的支持。即 node.elements() 返回一个 List> 不是 List 但是我最喜欢的 Java XML 库 我更喜欢直接打印 HTML 并手动转义所有变量,而不是任何 XML 库。对于 HTML,XML 库会使代码变得丑陋且极长。

以上是关于Java HTML Builder(反模板)库? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 lombok @Builder 时通过 Jackson 反序列化“2021-09-24 00:00:00”日期格式

C++ 模板工厂构造函数/反序列化

Java Jackson将空字段反序列化为POJO中的默认空列表

Java:使用json-SpringBoot中的“​​@class”将json反序列化为rest模板中的对象

一个现代化的JSON库Moshi针对Android和Java

Grails REST Client Builder 在处理来自 Jersey Web 服务的响应时收到 JSON 反序列化错误