2011-07-17 86 views

回答

1

有沒有這樣做的過濾器。我們有自己的模板邏輯,它使用了所謂的遞歸下降解析器。

這實際上是一個不平凡的問題來完成這種註解解析。我們首先做的就是使用Jsoup將整個HTML作爲一個類似DOM的樹。 Jsoup負責將HTML規範化爲類似於XML的結構(儘管如此)。

然後,我們下降此樹並構建一個「Renderer」並行樹作爲Java對象。每個渲染器都能夠執行特定的操作,即吐出HTML,顯示如果值爲真等。假設渲染器樹匹配HTML樹,如果ShowIf返回false,我們也將其下面的整個分支隱藏起來。

有一些更復雜的事情正在進行頁面嵌入等內容,但這是它的要點。感謝您的客氣話!

Dhanji,創建者,Sitebricks & Guice Servlet。

+0

感謝您的回答! – Roman

1

有可能攔截在什麼被寫到響應體,然後相應地裝點它,用FilterHttpServletResponseWrapper幫助修改最終響應體,其中至少getWriter()是被覆蓋,以便它返回一個自定義的實現。

例如

chain.doFilter(request, new FooResponse((HttpServletResponse) response)); 

public class FooResponse extends HttpServletResponseWrapper { 

    public FooResponse(HttpServletResponse response) { 
     super(response); 
    } 

    public Writer getWriter() throws IOException { 
     // ... Here a custom one is returned. 
    } 

} 

即作家將例如緩衝由線響應行,解析寫入的字符,掃描含有@Foo等的字符的行,然後採取行動相應地用於下一線。

+0

thanx!這是一個好主意(儘管實現可能有點複雜)。 – Roman

2

它可能不是JSP,而是它自己的模板語言。框架必須將模板解析爲結構化xml +註釋;然後將其轉換爲可以即時編譯的Java代碼。