はじめに
新卒で弊社に入社し早4ヶ月。
研修が終わり最初の案件に参画してから早2か月が経とうとしています。現在の案件ではstrutsを使用しており、最初は訳も分からず時間を浪費するばかりでした。
作業を重ねるうちに段々と構造というか、仕組みというか…が分かってきたので備忘録として書き残します。
後から見返して、加筆修正していくつもりではあります!一応!
以下の内容はhttps://qiita.com/ebichan_88/items/aaae17e72d068517f33fを参考にしてます。
目次
1.構造
2.struts-config
3.jspファイル
4.処理するJavaファイル
5.データを扱うJavaファイル
6.値を格納したJava→jspに値を渡す
7.まとめ
構造
strutsは大きくわけて
- struts-config.xml
- 画面に表示させるjspファイル
- 実際に処理を行うjavaファイル
- データを格納するjavaファイル
struts-config
struts-config.xmlは遷移先の画面と実行するメソッドを指定したものです!
(最初の数週間はこれを教えてもらっても「ぽかーん」って感じでした…)
<actioin
path="/example.do"
type="example_type"
name="exampleForm"
scope="request"
varidate="true">
<set-propertty name="entity" value="entity:◯◯.◯◯◯.example#method" />
<forward name="success" path="index.jsp">
ここで特に重要になるのは、path、set-property、forwardです!
path
pathはjsp等で指定された際に、このアクションが呼び出されるための印みたいなものです。(後述します。)
set-property
set-propertyでは、処理を行うJavaファイルとメソッドを指定します。
先ほどの例で行くとJavaファイルがexample.Javaになり、使用するメソッドはmethodになります。
forward
forwardは遷移先の画面を指定します。
name="success"が指定されてたら処理が成功したらpathの遷移する。
jspファイル
jspファイルではformとactionを用います。
<html:form action="/example.do">
⋮
</html:form>
これで指定したactionを持つstruts-configが呼び出され、form内で入力した値が渡されます。
処理するJavaファイル
<set-propertty name="entity" value="entity:◯◯.◯◯◯.example#method" />
先ほどのstruts-configで指定されたJavaメソッドが呼び出されます。
public example_data method(){
example_data entity = new example_data();
//色々処理する
return entity;
}
ここで処理を行って最終的にデータを扱うクラスにそのデータをセットし、returnします。
データを扱うJavaファイル
特にありません。データを格納するクラスです。オブジェクトを作っておきます
public class example_data{
private String ex_1;
private String ex_2;
//こんな感じ
//コンストラクタ設定
//ゲッター、セッター設定
}
先ほどの処理を行っているメソッドによって、このクラスに値がセットされます。
値を格納したJava→jspに値を渡す
データを格納したはいいものの、それをどうやってjspまで持ってきて表示させるんだ!3週間ぐらいそう思い続けてました…
やらないといけないことは、use-beanを指定してあげるということです。
<jsp:useBean id="entity" scope="request" class="××.×××.example_data"/>
classにデータ格納したJavaクラスを指定してあげます。
すると、例えば
<html:text name="entity" property="example_1">
これでuseBeenでentityに設定したデータクラスのexample_1というフィールドの値が表示されるようです。
まとめ
以上のような処理を通して、1つの画面が表示されるまでいきます。
struts-configが操縦桿
こんな感じのイメージになります。
…これ、研修でやったMVCモデルとかいうやつじゃね?!ってなりました。
ほんとに実際に手を動かして体験しないと理解できないこと多いですね。これからも精進です!