Struts2の下書き中

####Struts2の勉強中###

```xml:struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
  <!-- アクションのパッケージ定義 -->
  <package name="default" extends="struts-default">
    <!-- Hello worldのサンプルアクション -->
    <action name="hello" class="sample.HelloWorldAction" method="execute">
      <result name="success">/view/sample/HelloWorld.jsp</result>
    </action>
</struts>
```

```jsp:index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- Struts2のタグライブラリを使用可能にする -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<!-- タイプ宣言はHTML5のものを使用する -->
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
  </head>
<body>
  <!-- 入力フォームはStruts2のタグを使用します -->
  <s:form action="hello">
    <s:textfield name="name" />
    <s:submit value="HelloWorldページへ行く" />
  </s:form>
</body>
</html>
```

```java:HelloWorldAction.java
package sample;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * [HelloWorldのアクションクラス]<br>
 * <br>
 * @author tarosa0001
 */
public class HelloWorldAction {
    /** ロガー */
    private Logger logger = LogManager.getLogger(HelloWorldAction.class);

    /** 名前 */
    private String name;

    /**
     * [アクション実行処理]<br>
     * HelloWorldを出力する処理を実行する。<br>
     * 実行するメソッドは、struts.xmlで指定したメソッド名を使用して実装する。<br>
     * Struts2ではアクションの処理結果でページの遷移先を決定するが、
     * 今回は"success"の固定文字列を返却する。<br>
     * <br>
     * @return
     */
    public String execute() {
        logger.info("入力されたパラメータは「{}」です。", name);
        return "success";
    }

    /**
     * [名前取得処理]<br>
     * 名前を取得します。<br>
     * Struts2がフォームに入力された値をパラメータとしてする際、
     * getterを使用するため、パラメータとして使用したい情報は、
     * Actionクラスのプロパティとして宣言しておき、getterを用意する。
     * <br>
     * @return 名前
     */
    public String getName() {
        return name;
    }

    /**
     * [名前設定処理]<br>
     * 名前を設定します。<br>
     * getter同様、ページ間で受け渡したい値はsetterを用意しておく。<br>
     * <br>
     * @param name 名前
     */
    public void setName(String name) {
        this.name = name;
    }
}
```

```jsp:HelloWorld.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Hello Struts2 world!</title>
  </head>
  <body>
    <!-- メッセージの間に渡されたデータを表示します。 -->
    Hello Struts2 world, <s:property value="name" />さん
  </body>
</html>
```

```xml:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Struts2-01</display-name>
  <welcome-file-list>
    <!-- アプリケーションルートであクセした時の表示ファイル設定 -->
    <!-- 必要はありませんが、今回はURLの入力間違いも防ぐため、index.jspのみとします。 -->
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <!-- Struts2のサーブレットフィルタ -->
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>

  <!-- URLに対して使用するフィルタの設定 -->
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
```

###その他###
```html:web.xml
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
  </head>
<body>
  <s:form action="sample_tag">
    ページ<br/>
    s:textfield<s:textfield name="user_id" value="USER_ID" size="24" label="ユーザID"/><br/><br/>
    s:password<s:password name="password" value="PASSWD" size="24" label="パスワード"/><br/><br/>
    s:hidden<s:hidden name="item_id" value="HIDDEN"/><br/><br/>
    ・セレクトのテスト(シングル)
    <select name="select1">
      <option value="1">結果１のページへ</option>
      <option value="2">結果２のページへ</option>
    </select><br/><br/>
    ・セレクトのテスト(マルチ)
    <select name="select2" multiple="multiple">
      <option value="A">A型</option>
      <option value="B">B型</option>
      <option value="O">O型</option>
      <option value="AB">AB型</option>
    </select><br/><br/>
    ・checkboxのテスト
    <input type="checkbox" name="chbox1" value="1" checked="checked" />面白い
    <input type="checkbox" name="chbox1" value="2" />役に立つ
    <input type="checkbox" name="chbox1" value="3" checked="checked" />いまいち
    <br/><br/>
    ・radioのテスト
    <input type="radio" name="radio1" value="1" checked="checked" />良い
    <input type="radio" name="radio1" value="2" />悪い
    <br/><br/>
    <s:submit value="SUBMIT!!" />
  </s:form>
</body>
</html>
```
```java:Sample01Action.java
package sam.tag;

/**
 * @author
 */
public class Sample01Action extends AbstractAction{

    private String user_id;
    private String password;
    private String item_id;

    private String select1;
    private String select2;

    private String chbox1;
    private String radio1;

    /**
     * [アクション実行処理]<br>
     * @return
     */
    public String execute() {
//        final String className = new Object(){}.getClass().getEnclosingClass().getName();
        final String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
//        System.out.println("className：：" + className);
//        System.out.println("methodName ：" + methodName);

        logger.info("▼開始▼：{}",methodName);
        logger.info("入力されたパラメータは「{}」です。", toString());

        short nextPage = Short.parseShort(select1);

        try {
            if (nextPage == 1) {
                return "success1";
            } else {
                return "success2";
            }
        } catch (Exception e) {
            return "error";
        } finally {
            logger.info("▲終了▲：execute()");
        }
    }

    @Override
    public String toString() {
        return "Sample01Action [user_id=" + user_id + ", password=" + password + ", item_id=" + item_id + ", select1="
                + select1 + ", select2=" + select2 + "]";
    }

    // 以下自動生成のgetterとsetter
    public String getUser_id() {
        return user_id;
    }

    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getItem_id() {
        return item_id;
    }

    public void setItem_id(String item_id) {
        this.item_id = item_id;
    }

    public String getSelect1() {
        return select1;
    }

    public void setSelect1(String select1) {
        this.select1 = select1;
    }

    public String getSelect2() {
        return select2;
    }

    public void setSelect2(String select2) {
        this.select2 = select2;
    }

    public String getChbox1() {
        return chbox1;
    }

    public void setChbox1(String chbox1) {
        this.chbox1 = chbox1;
    }

    public String getRadio1() {
        return radio1;
    }

    public void setRadio1(String radio1) {
        this.radio1 = radio1;
    }

}
```
```jsp:result1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>結果のページ</title>
  </head>
  <body>
    結果１のページ<br/>
    s:textfield：<s:property value="user_id" /><br/>
    s:password：<s:property value="password" /><br/>
    s:hidden：<s:property value="item_id" /><br/>
    select1：<s:property value="select1" /><br/>
    select2：<s:property value="select2" /><br/>
    checkbox：<s:property value="chbox1" /><br/>
    radio：<s:property value="radio1" /><br/>
  </body>
</html>
```