解答例 - 実習課題3 - 2.ActionForm
(実習課題3)
実習課題2を改良しなさい。
- 社員データに以下の要素を加える事。
- 社員番号(数値)
- 性別(boolean)
- 複数の住所を持つ社員に対応させる事。また該当するActionFormのプロパティは配列とする事。
解答例
▼ディレクトリ構成は以下の通り
.
├─com
│ └─techscore
│ └─struts
│ └─chapter2
│ └─exercise3 inputEmployee.jsp,outputEmployee.jsp
└─WEB-INF web.xml(実習課題2と同じ),struts-config.xml
├─classes
│ └─com
│ └─techscore
│ └─struts EncodingFilter.class(実習課題2と同じ)
│ └─chapter2
│ └─exercise3 InputEmployeeForm.class,OutputEmployeeAction.class
└─lib strutsライブラリjarファイル
※strutsライブラリjarファイル
struts.jar,commons-beanutils.jar,commons-collections.jar,commons-digester.jar,commons-logging.jar
/**
* InputEmployeeForm.java
* TECHSCORE Java JakartaStruts 2章 実習課題3
*
* Copyright (c) 2004 Four-Dimensional Data, Inc.
*
*/
package com.techscore.struts.chapter2.exercise3;
import org.apache.struts.action.ActionForm;
public class InputEmployeeForm extends ActionForm{
private String name;
private String[] address;
//<補足>
// inputEmployee.jspで以下のように配列のインデックスを指定する場合には
// <tr><td>住所</td><td><input type="text" name="address[0]"></td></tr>
// <tr><td>住所2</td><td><input type="text" name="address[1]"></td></tr>
// 宣言時に以下の形で配列の確保が必要
// private String[] address = {"", ""};
private int number;
private boolean gender;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAddress(String address[]){
this.address = address;
}
public String[] getAddress(){
return address;
}
public void setNumber(int number){
this.number = number;
}
public int getNumber(){
return number;
}
public void setGender(boolean gender){
this.gender = gender;
}
public boolean getGender(){
return gender;
}
}
/**
* OutputEmployeeAction.java
* TECHSCORE Java JakartaStruts 2章 実習課題3
*
* Copyright (c) 2004 Four-Dimensional Data, Inc.
*
*/
package com.techscore.struts.chapter2.exercise3;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class OutputEmployeeAction extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
return mapping.findForward("output");
}
}
<!-- inputEmployee.jsp -->
<!-- TECHSCORE Java JakartaStruts 2章 実習課題3 -->
<!-- Copyright (c) 2004 Four-Dimensional Data, Inc. -->
<%@ page contentType="text/html; charset=Windows-31J"
session="false"
pageEncoding="Windows-31J" %>
<html>
<head><title>TECHSCORE Java JakartaStruts 2章 実習課題3</title></head>
<body>
<h2>社員データ入力</h2>
<p>社員データを入力し、登録ボタンを押してください。</p>
<form action="<%=request.getContextPath() %>/com/techscore/struts/chapter2/exercise3/InputEmployee.do" method="post">
<table>
<tr><td>名前</td><td><input type="text" name="name"></td></tr>
<tr><td>住所</td><td><input type="text" name="address"></td></tr>
<tr><td>住所2</td><td><input type="text" name="address"></td></tr>
<tr><td>社員番号</td><td><input type="text" name="number"></td></tr>
<tr><td>性別</td>
<td><input type="radio" name="gender" value="true" CHECKED>男
<input type="radio" name="gender" value="false">女</td></tr>
</table>
<p><input type="submit" value="登録"></p>
</form>
※住所2は複数登録が必要な場合のみ入力してください。<br>
※社員番号は数字以外を入力すると0になります。<br>
※未入力チェックをしていないため、名前や住所が空でもそのまま登録されます。<br>
</body></html>
<!-- outputEmployee.jsp -->
<!-- TECHSCORE Java JakartaStruts 2章 実習課題3 -->
<!-- Copyright (c) 2004 Four-Dimensional Data, Inc. -->
<%@ page contentType="text/html; charset=Windows-31J"
session="false"
pageEncoding="Windows-31J" %>
<html>
<head><title>TECHSCORE Java JakartaStruts 2章 実習課題3</title></head>
<body>
<h2>社員データ入力</h2>
<p>登録された社員データは以下の通りです</p>
<jsp:useBean id="inputEmployeeForm23"
class="com.techscore.struts.chapter2.exercise3.InputEmployeeForm"
scope="request" />
<table border="2">
<tr><th>氏名</th><td><%=inputEmployeeForm23.getName() %></td></tr>
<% String[] address = inputEmployeeForm23.getAddress(); %>
<tr><th>住所</th><td><%=address[0] %></td></tr>
<tr><th>住所2</th><td><%=address[1] %></td></tr>
<tr><th>社員番号</th><td><%=inputEmployeeForm23.getNumber() %></td></tr>
<% if (inputEmployeeForm23.getGender()) { %>
<tr><th>性別</th><td>男</td></tr>
<% } else { %>
<tr><th>性別</th><td>女</td></tr>
<% } %>
</table>
<p><a href="<%=request.getContextPath() %>/com/techscore/struts/chapter2/exercise3/inputEmployee.jsp">入力に戻る</p>
</body></html>
▼struts-config.xml
<?xml version="1.0" encoding="Windows-31J" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="inputEmployeeForm23"
type="com.techscore.struts.chapter2.exercise3.InputEmployeeForm" />
</form-beans>
<action-mappings>
<action path="/com/techscore/struts/chapter2/exercise3/InputEmployee"
type="com.techscore.struts.chapter2.exercise3.OutputEmployeeAction"
name="inputEmployeeForm23"
scope="request">
<forward name="output"
path="/com/techscore/struts/chapter2/exercise3/outputEmployee.jsp" />
</action>
</action-mappings>
</struts-config>
▼起動URLは以下の通り
WEB_ROOT/com/techscore/struts/chapter2/exercise3/inputEmployee.jsp
EncodingFilter.javaの参照(実習課題2と同じ)

