[連載]
初めてのEnhydra
第3回 XMLCアプリケーションの基礎
さて、単にテキストを置き換えるだけでは面白くも何ともないので、続いてHTMLフォームから値を取り出すという例を作ってみます。
|
入力した値を表示するアプリケーションを作成する
|
テキストフィールドに入力した文字列を表示するアプリケーションを作ってみましょう。処理としては、
- 値を受け取る
- 値を書き出す
という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();
}
} |
実行結果は以下の画面のようになります。
|
実行結果 |