[連載]
初めてのEnhydra

第3回 XMLCアプリケーションの基礎




4.EインタラクティブなFormの作成

 さて、単にテキストを置き換えるだけでは面白くも何ともないので、続いてHTMLフォームから値を取り出すという例を作ってみます。

 入力した値を表示するアプリケーションを作成する

 テキストフィールドに入力した文字列を表示するアプリケーションを作ってみましょう。処理としては、

  1. 値を受け取る
  2. 値を書き出す

という2つの仕組みが必要です。

 まずは、新規プロジェクトを作成し、プロジェクト名を「textfield_ess」にし「Enhydra Super-Servlet」を新規で作成します。続いて、Welcome.htmlを以下のように修正します。

<html>
  <head>
    <title>Welcome to HelloXMLC</title>
    <meta charset=EUC-JP> <!-- またはShift_Jisを 追加 -->
  </head>
  <body bgcolor="#FFFFFF">
    <center>
      <table summary="Welcome.html">
        <tr>
          <td>
            <a href="http://www.enhydra.org/"><img src="media/Enhydra.gif"
             width="200" border="0" alt="Enhydra.gif"></a>
          </td>
          <td>
            <h1>Welcome to HelloXMLC.<br> </br></h1>
            <h2><SPAN ID="SubTitle">A Simple Web Application</SPAN></h2>
          </td>
        </tr>
        <tr>
          <td colspan="2">
            <center>
              The time at the web server is:
              <span id="time">1/1/00 00:00:00 (static)</span>.
            </center>
          </td>
        </tr>
        <tr>
          <td colspan="2">
            <center>
              <a href="Welcome.html">Sample redirect back to here</a>.
            </center>
          </td>
        </tr>
      </table>
    </center>
    <!-- ここから -->
    <FORM NAME="FORM1" METHOD="POST" ACTION="WelcomePresentation.po">
    <INPUT TYPE="TEXT" NAME="TEXTFIELD" SIZE="50" VALUE="">
    <BR>
    <INPUT TYPE="SUBMIT" VALUE="変更">
    </FORM>
    <!-- ここまで追加 -->
  </body>
</html>

 ここで[ウィザード|XMLC Compiler]を実行するのですがこのままでは日本語の文字化けを起こしてしまうので、XMLCのコンパイルオプションを設定します。

Ee文字のエンコーディングを正しく指定しないと、左下のボタンのように文字化け(「??」と表示)を起こしてしまう

 エンコーディングの指定は、Linux上で開発を行っている場合は、「-html:encoding EUC-JP」、Windowsの場合は、「-html:encoding Shift_Jis」 を設定します。

コンパイルオプションにエンコーディングを指定する

 ここで指定しているEUC-JPやShift_JisはXML 1.0勧告で定義されています。

■run()メソッドの実装「WelcomePresentaion.javaを修正する」

 最後に例によって、run()メソッドの実装です。今回は変数を1つ用意しました。処理としては、まず受け取ったHTMLフォームのテキストフィールドの値を参照して、nullでないなら受け取った値をそのまま書き出し、nullの場合は「Hello XMLC」と書き出すようにしてみました。

/*
* HelloXMLC
*
* Enhydra super-servlet presentation object
*
*/

package helloxmlc.presentation;

// Enhydra SuperServlet imports
import com.lutris.appserver.server.httpPresentation.HttpPresentation;
import com.lutris.appserver.server.httpPresentation.HttpPresentationComms;
import com.lutris.appserver.server.httpPresentation.HttpPresentationExceptio
n;
import com.lutris.appserver.server.httpPresentation.HttpPresentationOutputSt
ream;
import com.lutris.appserver.server.httpPresentation.HttpPresentationResponse
;

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

public class WelcomePresentation implements HttpPresentation {


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

HttpPresentationOutputStream out;
WelcomeHTML welcome;
String now;
byte[] buffer;
String str; // 追加

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

now = DateFormat.getTimeInstance(DateFormat.SHORT).format(new Date()
);
welcome.getElementTime().getFirstChild().setNodeValue(now);

// ----ここから追加------------------------------------------
if (comms.request.getParameter("TEXTFIELD") != null) {
str = new String( comms.request.getParameter("TEXTFIELD").getBytes
("8859_1") );
welcome.setTextSubTitle(str);
} else {
welcome.setTextSubTitle("Hello XMLC!!");
}
// ----ここまで追加------------------------------------------

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

}

 実行結果は以下の画面のようになります。

実行結果

 

4/5
5.コンポーネント化で開発効率を上げる

初めてのEnhydra(第3回)
  1.Enhydraの最新動向
日本語版Lutris Enhydra 3.5が出荷される
  2.XMLCとは何か
Enhydraのアプリケーションフレームワーク
XMLCが行うこと
  3.実際にアプリケーションを作成してみる
サンプルアプリケーションを実行してみる
“Hello XMLC”を作成してみる
4.インタラクティブなFormの作成
入力した値を表示するアプリケーションを作成する
  5.コンポーネント化で開発効率を上げる
ElementGeneratorの作成



連載記事一覧

 



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

注目のテーマ

Java Agile 記事ランキング

本日 月間