更好的Html Builder in java
我想低于输出。
Blah Blah table Header--Constant Part some text-constant part for(i=0;i<some value;i++) { for(j=0;j<another value;j++) { if(some condition) { some text } else { some text } } }
正如你可以看到它混合了html,它将从java逻辑中生成其余部分。 现在这里是我的问题 – 如何在独立的java中实现(即不是jsp)。我知道我可以将它写入普通文件。但不知何故,我觉得这是一个丑陋的解决方案。有没有办法在一些更好的方式完成它办法? 基本上我正在为java寻找一个好的HTML构建器。 已经检查过 – Freemarker。 我也愿意用任何语言实现,因为java是我最喜欢的语言,所以我更喜欢它。
Gagawa “允许开发人员在Web或非Web应用程序中轻松动态地构建格式良好的HTML”。
它需要使用一个jar,源代码可以免费阅读。
一个例子…
Div div = new Div(); div.setId("mydiv").setCSSClass("myclass"); A link = new A(); link.setHref("http://www.example.com").setTarget("_blank"); div.appendChild( link ); Img image = new Img( "some alt", "http://sofzh.miximages.com/java/some-image.png" ); image.setCSSClass( "frame" ).setId( "myimageid" ); link.appendChild( image ); System.out.print( div.write() );
这会产生以下HTML:
如果你想坚持使用纯java,你可以使用模板。
例如:
... constant html ... {variablePart} ... constant html ...
将其保存在某处(例如,在.properties
文件中)并将其加载到应用程序的String
中。 然后有你的常规建筑代码……
StringBuilder builder = new StringBuilder(); for(j=0;jsome text"); } else { builder.append("some text "); } }
最后得到你的HTML:
String finalHTML = templateHTML.replace("{variablePart}", builder.toString());
它可能不完美,但它比你拥有的要好一些。
您可以考虑使用apache中的velocity模板。 在Web或Application Server中运行不需要Velocity
速度如何工作
用户指南
你最想要的是模板引擎 。 许多存在,但两个大男孩是Freemarker和Apache Velocity 。 两人都很高兴独立应用。 您在post中提到了Freemarker,但看起来好像您拒绝了它。 我可以问为什么?
如果您不是在模板引擎之后,您可以使用javax.swing.text.Document和javax.swing.text.html.HTMLEditorKit在代码中构建DOM,但我会反复推荐它。
Chunk是我免费的Java开源模板引擎。 Chunk就像Freemarker或Velocity,但语法更直观。
Chunk的可嵌套“循环”和“if”标签使这种事情变得非常简单:
my_template.chtml(放在类路径中,例如在src / themes / my_template.chtml中)
Blah Blah table Header--Constant Part some text-constant part {!---Main Customization Part--} {% loop in $list as $row %} {% loop in $row as $cell %} {% if ($cell.color == "blue") %} {$cell.text} {% else %} {$cell.text} {% endif %} {% endloop %} {% endloop %}
使用此模板的示例java:
import com.x5.template.Theme; import com.x5.template.Chunk; ... Theme theme = new Theme(); Chunk html = theme.makeChunk("my_template"); html.set("class_a", "blue_cell"); html.set("class_b", "plain_cell"); String row1 = "[[color,text],[blue,moe],[red,curly],[orange,larry]]"; String row2 = "[[color,text],[red,hat],[black,dog],[blue,bottle]]"; String[] list = new String[]{row1,row2}; html.set("list", list); out = getOutputWriter(); html.render( out ); // or System.out.print( html.toString() ) out.flush(); out.close();
我使用内联表(Chunk便捷格式)来创建循环友好数据但您可以使用实现com.x5.util.DataCapsule的任何对象的数组或列表,Chunk将在渲染模板之前将数据复制出对象。
最终输出:
Blah Blah table Header--Constant Part some text-constant part moe curly larry hat dog bottle
rythm是一种高性能(比速度快2到3倍)的纯Java模板,它使用类似Razor的语法:
@args String who @if ("world".equals(who)) { hello @who } else { bye @who }
它支持用户定义的布局模板,用户定义的标签等等。 查看http://play-rythm-demo.appspot.com/上的完整function演示
你还需要管理动作,java代码中的css设置难以测试和更改,为什么不使用wicket.apache.org?