2011-07-17 11 views
0

SiteBricks user guideからの例です:sitebricksに実装されたjspでアノテーションはどのようにサポートされていますか?ここ

<html> 
<body> 
    @ShowIf(true)  <----- I'm impressed with this line 
    <p>${message} from Sitebricks!</p> 
</body> 
</html> 

私はそれが実装されているか興味が? (私はどのようにエントリポイントのサイトブリックを作成してJSPからサーブレットに変換するのかを管理しています)

ありがとうございました!

答えて

1

これを行うフィルタはありません。私たちは、再帰的降下パーサーとして知られているものを使用する独自のテンプレートロジックを持っています。

この種の注釈解析を行うことは、実際には軽視されない問題です。私たちが最初にやることは、Jsoupを使ってDOMのようなツリーとしてHTML全体をスローすることです。 Jsoupは、HTMLをXMLのような構造に正規化します(ただし、正確ではありません)。

次に、このツリーを下り、Javaオブジェクトとして "Renderers"の並列ツリーを構築します。各レンダラーは、何か具体的な処理を行うことができます。つまり、HTMLを吐き出すことができます。Show値がtrueの場合などです。レンダラーツリーがHTMLツリーに一致すると、ShowIfがfalseを返した場合、

ページ埋め込みのように複雑なことがいくつかありますが、これがその要点です。親切な言葉をありがとう!

ダンジ、クリエイター、Sitebricks & Guiceサーブレット。

+0

答えをありがとう! – Roman

1

それはカスタム実装を返すようにそれはレスポンスボディに書き込まれているものに傍受し、それに応じてそれを飾ると、少なくともgetWriter()オーバーライドされてされている、請求FilterHttpServletResponseWrapperの助けを借りて、最終的なレスポンスボディを変更することが可能です。

など。ライターは、例えば、書かれた文字を解析し、ラインによって応答ラインバッファ@Fooなどの文字を含む行をスキャンした後、次のために応じて行動を取るだろうと

public class FooResponse extends HttpServletResponseWrapper { 

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

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

} 

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

ライン。

+0

thanx!これは良いアイデアです(実装は少し複雑かもしれませんが)。 – Roman

2

おそらくJSPではなく独自のテンプレート言語です。フレームワークは、構造化XML +注釈としてテンプレートを解析する必要があります。 Javaコードに変換され、それは即座にコンパイルされます。

関連する問題