更好的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) {  } else {  } }  }  

正如你可以看到它混合了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("
"); } }

最后得到你的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中)

     
some textsome text
some text
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") %} {% else %} {% endif %} {% endloop %} {% endloop %}
{$cell.text}{$cell.text}

使用此模板的示例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?