FrontPage > SAStrutsの覚書 > サンプルアプリ

登録、更新画面

empテーブルへ登録する画面を作成する。登録処理後は更新画面(更新モード)を表示する。

1. Actionフォーム作成

EditEmpForm.javaを作成する。

package com.ziqoo.sassample.form;

import java.util.List;
import org.seasar.struts.annotation.DateType;
import org.seasar.struts.annotation.FloatRange;
import org.seasar.struts.annotation.IntRange;
import org.seasar.struts.annotation.Mask;
import org.seasar.struts.annotation.Required;
import com.ziqoo.sassample.entity.Dept;
public class EditEmpForm {
   public Long id;

   @Required
   @IntRange(min=0, max=Integer.MAX_VALUE)
   public String empNo;

   @Mask(mask="^\\w+$")
   public String empName;

   @IntRange(min=0, max=Integer.MAX_VALUE)
   public String mgrId;

   @DateType(datePattern="yyyy/MM/dd")
   public String hiredate;

   @FloatRange(min="0", max="99999.99")
   public String sal;

   public Integer deptId;

   public Integer versionNo;

   /** 部門選択リスト */
   public List<Dept> deptList;

}

2. Actionクラス作成

EditEmpAction.javaを作成する。

package com.ziqoo.sassample.action;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.util.TokenProcessor;
import org.seasar.framework.beans.util.Beans;
import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;
import org.seasar.struts.exception.ActionMessagesException;
import com.ziqoo.sassample.entity.Emp;
import com.ziqoo.sassample.form.EditEmpForm;
import com.ziqoo.sassample.service.DeptService;
import com.ziqoo.sassample.service.EmpService;
public class EditEmpAction {
   @Resource
   protected DeptService deptService;

   @Resource
   protected EmpService empService;

   @Resource
   @ActionForm
   protected EditEmpForm editEmpForm;

   @Resource
   protected HttpServletRequest request;

   @Execute(validator=false)
   public String index() {

       if (editEmpForm.id != null) {
           Emp emp = empService.findById(Long.valueOf(editEmpForm.id));
           Beans.copy(emp, editEmpForm).execute();
       } else {
           TokenProcessor.getInstance().saveToken(request);
       }

       // 部門選択リスト作成
       editEmpForm.deptList = deptService.findAllOrderById();

       return "editEmp.jsp";
   }

   @Execute(validator=true, input="echo")
   public String add() {
       if (!TokenProcessor.getInstance().isTokenValid(request, true)) {
           throw new ActionMessagesException("E002", true);
       }
       // 部門選択リスト作成
       editEmpForm.deptList = deptService.findAllOrderById();
       // 登録
       Emp emp = Beans.createAndCopy(Emp.class, editEmpForm).execute();
       empService.insert(emp);

       return "index?id="+emp.id+"&redirect=true";
   }

   @Execute(validator=true, input="echo")
   public String update() {
       // 部門選択リスト作成
       editEmpForm.deptList = deptService.findAllOrderById();
       Emp emp = Beans.createAndCopy(Emp.class, editEmpForm).execute();

       try {
           empService.update(emp);
           editEmpForm.versionNo = emp.versionNo;
       } catch (OptimisticLockException e) {
           throw new ActionMessagesException("E003", true);
       }

       return "editEmp.jsp";
   }

   @Execute(validator=false)
   public String echo() {
       // 部門選択リスト作成
       editEmpForm.deptList = deptService.findAllOrderById();

       return "editEmp.jsp";
   }
}

3. JSP作成

EditEmpAction.java内で"editEmp.jsp"を選択する。
[Ctrl+8]を押して、editEmp.jspを作成する。

<%@page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
<link rel="stylesheet" type="text/css" href="${f:url('/css/stylesheet.css')}">
<script type="text/javascript">
<!--
function add(btn) {
   btn.disabled = true;
   var frm = document.getElementById("form1");
   frm.action += "add";
   frm.submit();
}
//-->
</script>
</head>
<body>
<s:form method="POST" styleId="form1">
<tiles:insert template="/WEB-INF/view/common/layout.jsp" flush="true">
<tiles:put name="content_menu" type="string">
<c:choose>
   <c:when test="${id == null}">
       <button onclick="add(this)">登録</button>
   </c:when>
   <c:otherwise>
       <s:submit property="update" value="更新"/>
   </c:otherwise>
</c:choose>
</tiles:put>
<tiles:put name="content" type="string">
<div id="content" class="content_scroll">
   <html:errors/>
       <table class="data" style="width:300px;">
       <tr>
           <th class="data" style="width: 100px;">ID</th>
           <td class="data" style="width:150px;">
           ${id}<html:hidden property="id"/><html:hidden property="versionNo"/>
           </td>
       </tr>
       <tr>
           <th class="data">従業員番号</th>
           <td class="data">
               <html:text property="empNo" size="12" maxlength="10" errorStyleClass="error"/></td>
       </tr>
       <tr>
           <th class="data">従業員名</th>
           <td class="data">
               <html:text property="empName" size="26" maxlength="20" errorStyleClass="error"/></td>
       </tr>
       <tr>
           <th class="data">雇用日</th>
           <td class="data">
               <html:text property="hiredate" size="12" maxlength="10" errorStyleClass="error"/>
           </td>
       </tr>
       <tr>
           <th class="data">給与</th>
           <td class="data">
               <html:text property="sal" size="10" maxlength="8" errorStyleClass="error"/>
           </td>
       </tr>
       <tr>
           <th class="data">管理者ID</th>
           <td class="data">
               <html:text property="mgrId" size="12" maxlength="10" errorStyleClass="error"/>
           </td>
       </tr>
       <tr>
           <th class="data">部門名</th>
           <td class="data">
               <html:select property="deptId">
                   <option value=""></option>
                   <html:options collection="deptList" property="id" labelProperty="deptName"/>
               </html:select>
           </td>
       </tr>
       </table>
       <html:hidden property="versionNo"/>
</div>
</tiles:put>
</tiles:insert>
</s:form>
</body>
</html>

4. スタイルシート

stylesheet.cssへ以下のスタイルを追加。

DIV.content_scroll {
   margin: 0px;
   padding: 0px;
   width: 100%;
   height: 100%;
   overflow:auto;
}

5. メニュー追加

src/main/webapp/WEB-INF/view/common/menu.jspに登録メニューを追加する。

<table class="menu">
<tr>
   <td class="menu"><s:link href="/searchEmp">従業員検索</s:link></td>
</tr>
<tr>
   <td class="menu"><s:link href="/editEmp">従業員登録</s:link></td>
</tr>
</table>

6. 実行結果

sassample07.jpg


sassample08.jpg





添付ファイル: filesassample08.jpg 70件 [詳細] filesassample07.jpg 384件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-01-20 (金) 23:44:44 (2734d)