機能SAMPLE.3 「EzServlet/繰り返し項目を作成する方法」
繰り返し項目を作成する方法は、HTMLで繰り返したい箇所を「<tg:loop name=""></tg>」タグで囲みます。
つまり「<tg:loop name="">」と「</tg>」の間には、繰り返したい内容を記述するだけでOKです。
では、HTMLとDTOの関係について説明します。繰り返し項目は、どの様にDTOに記述すればよいのでしょうか?
答えは「<tg:loop name="">」タグの"name属性"で指定した名称を、クラス名とするインナークラスをDTOに作成します。そして、DTOのプロパティーとして、インナークラスを格納するためのListを作成すれば良いのです。
尚、Listのプロパティー名は、「インナークラス名のキャメル記法 + List」にします。
以下のHTMLを例に説明します。ファイル名は「Hoge.html」です。
<html>
<head></head>
<body>
<form method="POST">
<tg:out name="oyafield"><br>
<tg:loop name="Item">
<tg:out name="kofield1"></tg>,
<tg:out name="kofield2"></tg><br>
</tg>
</form>
</body>
</html>
DTOクラスは以下の様になります。
public class Hoge implements Serializable { /** Hogeに対応するコントロラークラスを保持する属性です */ public static final Class CONTROLLER_CLASS = HogeController.class; // 出力項目「oyafield」です。 public String oyafield; // 繰り返し項目のインナークラスを格納するリストです。 public List itemList = new ArrayList(); // 繰り返し項目のプロパティーを保持するインナークラスです。 public class Item implements Serializable { // 出力項目「kofield1」です。 public String kofield1; // 出力項目「kofield2」です。 public String kofield2; } }
CONTROLLERクラスは以下の様になります。
public class HogeController { /** 初期画面を出力するメソッドです */ public void index(Hoge hoge) { // 1つ目の繰り返し項目インスタンス(Item)を生成します。 Item item = new Item(); item.kofield1 = "1"; item.kofield2 = "あああ"; // 繰り返し項目インスタンスをHogeに追加します。 hige.itemList.add(item); // 2つ目の繰り返し項目インスタンス(Item)を生成します。 item = new Item(); item.kofield1 = "2"; item.kofield2 = "いいい"; // 繰り返し項目インスタンスをHogeに追加します。 hige.itemList.add(item); // 表示するHtmlのDTOをセットします。 response.setPage(hoge); } }
これで、繰り返し項目の作成が出来ました。
超かーんたーん(o^∀^)oネッ♪
機能SAMPLE.4 「EzServlet/繰り返し項目で押されたボタンを知る方法」
前回の繰り返し項目がわかれば、メチャこれも簡単!!!
まず、HTMLで繰り返しの中に「ボタン」を設定します。前回のHTMLに繰り返し「ボタン」を追加しましょう。。。
以下のHTMLを例に説明します。ファイル名は「Hoge.html」です。
<html>
<head></head>
<body>
<form method="POST">
<tg:out name="oyafield"><br>
<tg:loop name="Item">
<input type="button" value="選択" name="select">,
<tg:out name="kofield1">,
<tg:out name="kofield2"><br>
</tg>
</form>
</body>
</html>
DTOクラスは前回と変わらないので省略します。
CONTROLLERクラスは以下の様になります。
繰り返しの何番目のボタンが押されたかが、「int i」で通知されます。
public class HogeController {
/** 初期画面を出力するメソッドです */
public void index(Hoge hoge) {
// 1つ目の繰り返し項目インスタンス(Item)を生成します。
Item item = new Item();
item.kofield1 = "1";
item.kofield2 = "あああ";
// 繰り返し項目インスタンスをHogeに追加します。
hige.itemList.add(item);// 2つ目の繰り返し項目インスタンス(Item)を生成します。
item = new Item();
item.kofield1 = "2";
item.kofield2 = "いいい";
// 繰り返し項目インスタンスをHogeに追加します。
hige.itemList.add(item);// 表示するHtmlのDTOをセットします。
response.setPage(hoge);
}
/** 繰り返しの「選択」ボタンが押された時に呼び出されるメソッドです。
何番目のボタンが押されたかが、シグニチャ「int i」で通知されます。*/
public void select(int i, Hoge hoge) {
System.out.println(i+"番目の「選択」ボタンが押されました。");
// 表示するHtmlのDTOをセットします。
response.setPage(hoge);
}
}
1番目の「選択」ボタンが押された場合は「0」、3番目のボタンが押された場合は「2」が受け渡されます。
これで、繰り返し項目で押されたボタンを知る方法ができました。
超かーんたーん(o^∀^)oネッ♪
--追記--
繰り返しの中の「繰り返し」、つまりネストした繰り返しの場合は、シグニチャを「int i, int j」の様にすればOKです。
しかも、ネストに制限はありません。
機能SAMPLE.5 「EzServlet/ファイル・アップロードする方法」
単純なファイルアップロードの方法を説明します。
記述の仕方は、入力フィールド(<input type="text">)や出力フィールド(<tg:out>)と同じ感じでOK!!!
HTMLに、ファイルアップロードを行うための「<input type="file">」タグを記述します。
後は、HTMLに対応するDTOにプロパティーとして、「java.io.File」を作成します。
DTOに作成する「java.io.File」のプロパティー名は、HTMLで記述した「<input type="file">」のname属性と名称と同名にします。
以下のHTMLを例に説明します。ファイル名は「Hoge.html」です。
<html>
<head></head>
<body>
<form method="POST">
<input type="file" name="uploadFile">
<input type="button" value="実行" name="execute">
</form>
</body>
</html>
DTOは以下の様になります。
public class Hoge implements Serializable { /** Hogeに対応するコントロラークラスを保持する属性です */ public static final Class CONTROLLER_CLASS = HogeController.class; /** アップロードファイル「uploadFile」を格納する属性です。*/ public File uploadFile; }
CONTROLLERクラスは以下の様になります。
public class HogeController { /** 実行「execute」ボタンが押された時に呼び出されるメソッドです。*/ public void execute(Hoge hoge) { // 画面入力値をHoge.javaにセットします。 request.set(hoge); // ファイルがアップロードされたかを確認します。 if(hoge.uploadFile != null) { System.out.println("ファイル名:"+hoge.uploadFile.getName()+"がuploadされました!"); } // 表示するHtmlのDTOをセットします。 response.setPage(hoge); } }
HTMLの属性名とDTOのプロパティー名を同名にする事により、アップロードファイルを受け取る事が出来ます。
超かーんたーん(o^∀^)oネッ♪
机上の空論が横行する「今の時代」こそ、技術を磨け!!!
既に、色々な方々が書かれている事ですが、最近よくぶち当たる問題なので、自分の考えを書いておこうかな。っと
最初に、この文章で書く「机上の空論」とは何をさしているのかをハッキリさせておこうと思います。
ここで言う「机上の空論」とは、現場で(あまり)利用されていない技術の事を指します。
実際の開発で利用されていない技術は机上の空論に過ぎません。というスタンスです。
今の時代は、机上の空論が横行しやすい時代です。それは、昔の比では無いのです。
何故かって?それは、新しい技術が次々に生まれてくるからです。
今の時代は、アホみたいなスピードで新技術が生まれてます。
大手SIerでさえ、新技術をトレースするのが精一杯で、実際に熟知した技術はごく一部です。
しかし、新技術というのは、成熟されていない状態で発表されます。
成熟されていない技術は、煩雑で問題も頻発します。それらの問題は、多くの現場で利用される事により解消され、成熟していくのです。
そうして、現場が認める事により、デファクト・スタンダードとして定着する事になります。
しかし、新技術の全てが残るわけではありません。時間をかけて検討され淘汰されていきます。
本来、技術はこのようにして成熟されていく物なのです。
ところが、その新技術の先駆者となって、オピニオンリーダーになろうとする企業(特に大手SIer)が出てきます。
企業は、オピニオンリーダーになるために、まず、如何にその技術が先進的であり、将来性があるかを提示します。しかし、ほとんどの場合、提示される内容は、たんなるバズワードである事を知っておいて下さい。(言いすぎ?)
あたりまえですが、これから成熟する(まだ実績が無い:少ない)技術に何故将来性があるのかは、予想以外の何者でもないのです。
そして、この事による弊害は、以下のような問題も引き起こします。
・バズワードにあおられて、現場の開発者に無理やり導入させる。これによりデスマに陥るケース。
・開発後(開発中)に、その技術が衰退していく。保守性の低下をまねき、コストアップになる。
今までにあった例を挙げると、(初期の)EJB、JSF...等が良い例でしょう。
*EJBを初期の記述したのは、現在の3になってから、今後どうなるかは分からないため
結局のところ、何が良いのかは、自分で判断するしかないのです。
判断するには知識が要ります。未来の事など誰にも分かりませんが、今ある現状に最も適した物を選択できる知識は絶対必要になります。そのためには、最低限の勉強は必要となるのです。
もちろん、技術が全てとは言いません。が、システム会社にいるのなら技術を上辺ではなく中身で語ろうよ。と言いたい…><
全力で”のたまわって"みた … ん(・・?