2012-05-09 6 views
8

예, 알고 있습니다. thishasbeenaskedbefore입니다. 그러나 질문의 ​​대부분은 2 년 전이었습니다. 그리고 오늘 더 나은 대답이 있어야합니다.템플릿 언어가 더 필요합니다.

HTML 렌더링을위한 템플릿 언어가 필요합니다. 요구 사항 :

  1. Java에서 호출 할 수 있어야합니다.

  2. Freemarker, Velocity 또는 StringTemplate이 아니어야합니다. 우리는 Freemarker를 1 년 동안 사용해 왔지만 너무 느립니다. 그것은 부하시 CPU 사이클의 50 %를 소모합니다. 속도가 Freemarker보다 나쁘고 StringTemplate 자체 문제가 있습니다.

  3. JSON 또는 Java와 동등한 매핑, 즉지도, 목록 및 프리미티브를 사용해야합니다.

나는 Node.js를 사기 시작했다. 작년에는 Javascript에 대한 템플릿 활동이 많이 있었지만 자바에 대해서는 거의 그렇지 않았습니다.

이상적인 언어는 Liquid인데, 이는 레일스에만 존재합니다.

Jade은 Java 용이지만 모든 HTML 형식을 다시 지정하고 싶지는 않습니다.

업데이트

나는 결국 available for Java도 인 Handlebars에 정착했다. 둘 다 훌륭합니다.

+0

이미 논란의 여지가 그냥 마크 업 stringifies ~ 안에 질문문. 이것이 어떻게 건설적인 것일 수 있습니까? –

+0

수정 됨. 논쟁적인 의도는 없었습니다. – ccleve

+0

왜 Freemarker보다 Velocity를 더 나쁜 것으로 생각하는지 조금 자세히 설명해 주시겠습니까? 나는 그와 같은 시스템 소비와 마주 친 적이 없다. –

답변

4

Chunk은 json에게 친숙합니다. JSON은 컨트롤러 코드 나 exec/매크로 호출을위한 템플릿 자체의 태그 값으로 사용할 수 있습니다.

{% exec %} 
    {% data @json %} 
    { name: "whatever", 
     vitals: ["an","array","of","data"], 
     friends: [{name: "bob"},{name: "crystal"}] 
    } 
    {% enddata %} 

    <div>Name: {$name}</div> 

    {% if ($friends) %} 
    <div>Friends: 

     <ul> 
     {% loop in $friends as $friend %} 
     <li>{$friend.name}</li> 
     {% endloop %} 
     </ul> 

    </div> 
    {% endif %} 

{% endexec %} 

또는 내부 템플릿을 사용하고 자바 측에서 json을 삽입하십시오.

SRC는/테마/example.chtml

<div>Name: {$name}</div> 

    {% if ($friends) %} 
    <div>Friends: 

    <ul> 
    {% loop in $friends as $friend %} 
    <li>{$friend.name}</li> 
    {% endloop %} 
    </ul> 

    </div> 
    {% endif %} 

만큼 getJsonXXX로() 메서드 목록과지도를 구현 뭔가를 반환 MyController.java

Theme theme = new Theme(); 
Chunk html = theme.makeChunk("example"); 

html.set("name", "whatever"); 
html.set("vitals", getJsonArray()); 
html.set("friends", getJsonFriendObjects()); 

html.render(out); 

, 청크가로 접착제합니다 템플릿을 올바르게 표시합니다 (목록 및지도가 목록 및지도를 더 많이 포함하더라도).

출력 :

<div>Name: whatever</div> 

<div>Friends: 

    <ul> 
    <li>bob</li> 
    <li>crystal</li> 
    </ul> 

</div> 
+0

청크가 최고입니다! – dns

0

Java+ 간단한 전처리 용액이다.

System.out.println({{ 
<html> 
    <body> 
    ... 
    </body> 
</html>}}) 

그것은 구성 구분이 있고 소비보다는 자바 코드를 통과 :

System.out.println({{ 
<xmlExample> 
    <name>{{fpp}}</name> 
    <number>{{bar}}</number> 
</xmlExample> 
}}); 

참조

관련 문제