2012-03-28 2 views
5

아래 출력을 받고 싶습니다.자바의 더 나은 HTML 빌더

<html> 
<head> 
</head> 
<body> 
<table> 
<tbody> 
<thead> 
Blah Blah table Header--Constant Part 
</thead> 
<tr> 
some text-constant part 
</tr> 
<!---Main Customization Part--> 
for(i=0;i<some value;i++) 
{ 
<tr> 
    for(j=0;j<another value;j++) 
    { 
     if(some condition) 
     { 
      <td class=another varibale>some text</td> 
     } 
     else 
     { 
      <td class=yet another varibale>some text</td> 
     } 
    } 
</tr> 
} 
</body> 
</html> 

HTML의 혼합으로 볼 수 있듯이 Java 논리에서 나머지를 생성합니다. 이제 내 질문 - 어떻게 독립 실행 형 자바 (즉, jsp) 구현할 수 있습니다. 나는 정상적인 file.But 쓸 수 있습니다 어떻게 든 내 생각 그게 못생긴 solution.Is 거기에 어떤 일을 끝낼 수있는 방법입니다 더 좋은 방법? 기본적으로 나는 자바를위한 훌륭한 HTML 빌더를 찾고있다. 이미 확인되었습니다. Freemarker. 또한 자바를 선호하는 언어이므로 다른 언어로도 구현할 수 있으므로 선호합니다.

+0

"가가와"를 확인하셨습니까? http://code.google.com/p/gagawa/ –

+0

간단한 템플릿 엔진을 사용할 수 있습니다. 이 항목을 확인하십시오 : http://stackoverflow.com/questions/3793880/lightweight-template-engine-in-java – mdakin

+0

* "출력이 부족합니다."* 출력이 잘못되었습니다. [확인 서비스] (http://validator.w3.org/)를 사용하여 확인하십시오. –

답변

15

Gagawa "개발자는 웹 또는 비 웹 응용 프로그램에서 올바른 형식의 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", "some-image.png"); 
image.setCSSClass("frame").setId("myimageid"); 
link.appendChild(image); 

System.out.print(div.write()); 

이 다음과 같은 HTML이 생성

<div id="mydiv" class="myclass"> 
    <a href="http://www.example.com" target="_blank"> 
    <img alt="some alt" src="some-image.png" class="frame" id="myimageid"> 
    </a> 
</div> 
+0

이 케이스의 완벽한 솔루션입니다 .thnx – Monojit

2

velocity 템플릿을 아파치에서 사용할 수 있습니다. 당신이 순수 자바, 당신은 템플릿을 사용할 수 고수 할 경우 속도는 웹 또는 응용 프로그램 서버

How Velocity Works

User guide

5

내에서 실행하는 데 필요하지 않습니다. (A .properties 파일 말) 어딘가에 저장

... constant html ... 
</tr> 
{variablePart} 
</tr> 
... constant html ... 

하고 앱에 String에로드 :

예를 들어

. 그런 다음 ...

StringBuilder builder = new StringBuilder(); 
for(j=0;j<another value;j++) 
{ 
    if(some condition) 
    { 
     builder.append("<td class=another varibale>some text</td>"); 
    } 
    else 
    { 
     builder.append("<td class=yet another varibale>some text</td>"); 
    } 
} 

을 일반 건물 코드가 그리고 마지막으로 당신의 HTML 얻을 :

String finalHTML = templateHTML.replace("{variablePart}", builder.toString()); 

완벽하지 않을 수도 있습니다,하지만 그것은 당신이 가진 것보다 조금 더 낫다.

+0

그것의 더 나은 접근. 나는 아직도 탐험 중이다. 고맙습니다 !! – Monojit

2

대부분 원하는 것은 templating engine입니다. 많은 사람들이 있지만 두 명의 큰 소년은 FreemarkerApache Velocity입니다. 둘 다 독립형 애플리케이션에 만족합니다. 귀하는 귀하의 게시물에 Freemarker를 언급했으나 거부 한 것처럼 보입니다. 왜 그런지 물어봐도 될까요?

템플릿 엔진을 수행하지 않은 경우 javax.swing.text.Documentjavax.swing.text.html.HTMLEditorKit을 사용하여 코드를 DOM에 구현할 수 있지만 반대로 권장합니다.

+0

음. 나는 곡선을 배우는 것 같아요.). 가가와를 탐험 해보세요. 나중에 속도를 확인할 수 있습니다. – Monojit

+0

커브를 배우면서 (IMO) 가치가 있습니다. 코드에서 이러한 것들을 처리하는 것은 빨리 못 생길 수 있습니다. –

0

rythm 높은 성능입니다 (2 ~ 3 배 빠른 속도보다) 순수 자바 템플릿 구문처럼 Razor를 사용하는 :

@args String who 
<p> 
@if ("world".equals(who)) { 
    hello @who 
} else { 
    bye @who 
} 
</p> 

사용자 정의 레이아웃 템플릿, 사용자 정의 태그 등을 지원합니다. 전체 기능 데모를 확인해보십시오. http://play-rythm-demo.appspot.com/

1

Chunk은 무료 Java 오픈 소스 템플릿 엔진입니다. Chunk는 Freemarker 나 Velocity와 비슷하지만 더 직관적 인 구문을 사용합니다.

덩어리의 중첩 가능한 "루프"와 태그는 매우 쉽게 이런 종류의 일을 할 "경우"(SRC/테마/my_template.chtml에서 예를 들어 클래스 경로에 위치)

my_template.chtml

<html> 
<head> 
</head> 
<body> 
<table> 
<tbody> 
<thead> 
Blah Blah table Header--Constant Part 
</thead> 
<tr> 
some text-constant part 
</tr> 
{!---Main Customization Part--} 
{% loop in $list as $row %} 
<tr> 
    {% loop in $row as $cell %} 
    {% if ($cell.color == "blue") %} 
     <td class="{$class_a}">{$cell.text}</td> 
    {% else %} 
     <td class="{$class_b}">{$cell.text}</td> 
    {% endif %} 
    {% endloop %} 
</tr> 
{% endloop %} 
</tbody> 
</table> 
</body> 
</html> 
을 내가 루프 친화적 인 데이터를 생성하는 인라인 테이블 (청크의 편의 형식)를 사용하지만, 어떤 객체 t의 배열이나 목록을 사용할 수 있습니다

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(); 

:이 템플릿 작업을위한

샘플 자바 hat은 com.x5.util.DataCapsule을 구현하고 Chunk는 템플릿을 렌더링하기 전에 객체에서 데이터를 바로 복사합니다.

최종 출력 : 당신은 작업을 관리 또한 필요

<html> 
<head> 
</head> 
<body> 
<table> 
<tbody> 
<thead> 
Blah Blah table Header--Constant Part 
</thead> 
<tr> 
some text-constant part 
</tr> 
<tr> 
     <td class="blue_cell">moe</td> 
     <td class="plain_cell">curly</td> 
     <td class="plain_cell">larry</td> 
</tr> 
<tr> 
     <td class="plain_cell">hat</td> 
     <td class="plain_cell">dog</td> 
     <td class="blue_cell">bottle</td> 
</tr> 
</tbody> 
</table> 
</body> 
</html> 
0

는 자바 코드에서 CSS의 세트는 테스트하기 어려운 변화는 왜 wicket.apache.org를 사용하지?