[連載]
初めてのEnhydra

第4回 デザインとロジックを分離するXMLCの正体




3.XMLCアプリケーションを作成する

 デフォルト値を持つフォームの生成

 前回はHTMLフォームからの値を受け取って処理を行うというサンプルを紹介しましたが、今回はその逆のパターンでPO側でデフォルト値を設定したHTMLフォームをクライアントのWebブラウザ側に返信するという処理を紹介します。

 まず新規プロジェクトをxmlc2_2という名前で作成します。ここでは、Enhydra Super-Servletウィザードを使います。Enhydra Super-Servletウィザードについて忘れてしまった方は、第1回「Enhydraにチャレンジ!」に説明がありますので読み返してください。また、細かい手順については、第3回「XMLCアプリケーションの基礎」を参考にしてください。

 例によって新規でオブジェクトギャラリからEnhydra Super-Servletを作成します。次に例としてウィザードが自動生成したWelcome.htmlを修正します。修正したHTMLファイルのコードは次のようになります。FORMタグに囲まれた部分が今回のメインとなる部分です。

<html>
  <head>
    <title>Welcome to xmlc2_2</title>
  </head>
  <body bgcolor="#FFFFFF">
    <CENTER>
      <H2>フォームサンプル</H2>
    </CENTER>
    <FORM NAME="TestForm" METHOD="GET">
      名前:<input type="TEXT" NAME="Name" id="Name">
      <BR><BR>

      住所:<TEXTAREA NAME="Addr" id="Addr" ROWS=5 COL=40></TEXTAREA>
      <BR><BR>

      性別:
      <div id="sampleRadioGrp">
        <input type=RADIO NAME="sampleradio" id="templateRadio" value="0">
      </div>
    </FORM>
  </body>
</html>

 この状態のHTMLファイルをブラウザで確認してみると、以下のようになります。

実行結果

 HTMLファイルの修正が終わったら、XMLC Complierで修正の終わったWelcome.htmlをコンパイルします。メニューから[ウィザード|XMLC Compiler]を選択し、XMLC Compilerを起動します。[Selected Pages to Compile:]に「Welcome.html」があることを確認して[Compile]ボタンをクリックします。これによってWelcomeHTML.classが生成されます。この時点で一度プロジェクトをメイクしておきましょう。[プロジェクト|プロジェクトのメイク]を実行します。

 次に、WelcomePresentation.javaを修正します。今回はテキストフィールドと複数行を持つテキストエリア、そしてラジオボタンに対して、デフォルト値を設定しています。

package xmlc2_2.presentation;

// Enhydra SuperServlet imports
import com.lutris.appserver.server.httpPresentation.HttpPresentation;
import com.lutris.appserver.server.httpPresentation.HttpPresentationComms;
import com.lutris.appserver.server.httpPresentation.HttpPresentationException
;
import com.lutris.appserver.server.httpPresentation.HttpPresentationOutputStr
eam;
import com.lutris.appserver.server.httpPresentation.HttpPresentationResponse;


import com.lutris.appserver.server.httpPresentation.*;
import org.w3c.dom.html.*;
import org.w3c.dom.*;

// Standard imports
import java.io.IOException;
import java.util.Date;
import java.text.DateFormat;

public class WelcomePresentation implements HttpPresentation {
  String[][] LadyOrGen = {
    {"女", "0"},
    {"男", "10"},
    {"その他","100"}
  };

  public void run(HttpPresentationComms comms)
  throws HttpPresentationException, IOException {

    HttpPresentationOutputStream out;
    WelcomeHTML welcome;

    byte[] buffer;

    welcome = (WelcomeHTML)comms.xmlcFactory.create(WelcomeHTML.class);

//-------------------------------------------------------------
// TEXTフィールドの設定
//-------------------------------------------------------------
    welcome.getElementName().setValue("あなたの名前");
//-------------------------------------------------------------

//-------------------------------------------------------------
// TEXTAREAの設定
//フィールド内で改行するには改行文字(\n)を付加します。
//-------------------------------------------------------------
    String addr="○○県"+"\n"+"□□市"+"\n\n"+"●●町";
    welcome.getElementAddr().appendChild(welcome.createTextNode(addr));
//-------------------------------------------------------------

//-------------------------------------------------------------
// Radio Buttonの追加
//-------------------------------------------------------------
    HTMLInputElement RadioTemplate = welcome.getElementTemplateRadio();
    RadioTemplate.removeAttribute("id");
    HTMLDivElement div = welcome.getElementSampleRadioGrp();

    for (int i = 0; i < LadyOrGen.length; i++) {
      HTMLInputElement cloneRadioBtn =
        (HTMLInputElement)RadioTemplate.cloneNode(true);
      cloneRadioBtn.setValue(LadyOrGen[i][1]);

      Node radioText = welcome.createTextNode(LadyOrGen[i][0]);
      cloneRadioBtn.appendChild(radioText);

      div.appendChild(cloneRadioBtn);

      HTMLBRElement br = (HTMLBRElement)welcome.createElement("BR");
      div.appendChild(br);
    }

    div.removeChild(RadioTemplate);
//-----------------------------------------------------------

    buffer = welcome.toDocument().getBytes();
    comms.response.setContentType( "text/html" );
    comms.response.setContentLength( buffer.length );
    out = comms.response.getOutputStream();
    out.write(buffer);
    out.flush();
  }

}

 ここまで完了したら、Enhydra Deploymentを実行します。[ウィザード|Enhydra Deployment]を実行します。ここではデフォルトのまま[Deploy]ボタンをクリックします。

 そしてプロジェクトを実行します。[実行|プロジェクトの実行]でEnhydra Multiserverが起動します。メッセージペインに「・・・HelloXMLC,INFO: All rights reserved.」と表示されたらブラウザを起動し「http://localhost:9000」にアクセスします。すると、以下の画面のようにデフォルト値が設定されたHTMLフォームが表示されます。

実行結果

 いかがでしたでしょうか。XMLCのメリットについて実感していただけたでしょうか。実はXMLCはJBuilderのウィザードからだけでなくコマンドラインからも実行可能です。Windowsであればコマンドプロンプト(俗にいうDOS窓)から実行できます。このため、EnhydraやKelp(JBuilderなどのIDEに組み込む支援ウィザード群を含む開発ツール)がなくてもXMLCの恩恵に浴することが可能です。ですから、その気になればデザイナー用のツールと連動させることも不可能ではありません(やるかどうかは別の話ですが)。単なるJSPの置き換えだけでなく、さまざまな用途に利用することが可能ですから、ぜひXMLCにチャレンジしてみてください。

 次回はいよいよ、POフレームワークの中で大きな役割を果たしている、HTTP通信にはつきもののセッション管理について説明します。

3/3

初めてのEnhydra(第3回)
  1.Enhydraの最新動向
  2.XMLCの正体
XMLCの動作を確認する
3.XMLCアプリケーションを作成する
デフォルト値を持つフォームの生成



連載記事一覧

 



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間