5

回答する前にお読みください。これは、私が夢見ている幻想的なプログラミング手法です。実生活に近いものがあれば知りたいです。

次の JSP ページ:

<%
html {
    head {
        title {"Pure fantasy";}
    }
    body {
        h1 {"A heading with double quote (\") character";}
        p {"a paragraph";}
        String s = "a paragraph in string. the date is ";
        p {
            s;
            new Date().toString();
        }
        table (Border.ZERO, new Padding(27)) {
            tr {
                for (int i = 0; i < 10; i++) {
                    td {i;}
                }
            }
        }
    }
}
%>

次の HTML ページを生成できます。

<html>
    <head>
        <title>Pure fantasy</title>
    </head>
    <body>
        <h1>A heading with double quote (") character</h1>
        <p>a paragraph</p>
        <p>a paragraph in string. the date is 11 December 2012</p>
        <table border="0" padding="27">
            <tr>
                <td>0</td>
                <td>1</td>
                <td>2</td>
                <td>3</td>
                <td>4</td>
                <td>5</td>
                <td>6</td>
                <td>7</td>
                <td>8</td>
                <td>9</td>
            </tr>
        </table>
    </body>
</html>

このファンタジーの特徴は、同じ古い Java プログラミング言語の手法を再利用してif-else-thenwhiletry-catchなどと同様の方法で使用されるカスタマイズされたキーワードを有効にして、構文の正確性を簡単にチェックできる非 html の方法で html タグを表すことです。最も重要な<%ことは、 、%><%=out.write()などの海で迷子になることなく、通常の Java コードと簡単に混同できます。

追加された機能は、生成された HTML に出力するコマンドとして文字列を直接配置できることです。これは、Java がサポートしていない機能です (純粋な文字列は、使用前に変数に割り当てる必要があります)。

  • 実生活に近いものはありますか?
  • そうでない場合、Java または JSP でカスタマイズされたキーワードを定義することは可能ですか?
  • それとも、そのためにまったく新しいプログラミング言語を作成する必要がありますか?
  • この種のセットアップにはどのような問題がありますか?

PS: HTML ライブラリを使用して、Java コードを使用して HTML を構築できることは知っていますが、そのようなライブラリの問題は、ソース コード自体に、上記のコードのように読み取り可能な HTML 表現がないことです。

4

2 に答える 2

2

Java ではなく Ruby の世界からのものですが、Hamlを見てください。

于 2012-12-11T04:59:57.160 に答える
1

基本的に代替の HTML テンプレート エンジンを求めているようです。あなたがそれをググれば、たくさんのオプションがあります。(Java で) 頻繁に出てくるように見えるのはApache Velocityです。ユーザーガイドの一例は次のようになります。

<HTML>
<BODY>
Hello $customer.Name!
<table>
#foreach( $mud in $mudsOnSpecial )
   #if ( $customer.hasPurchased($mud) )
      <tr>
        <td>
          $flogger.getPromo( $mud )
        </td>
      </tr>
   #end
#end
</table>
于 2012-12-11T05:00:26.260 に答える