サポート > Wagby Developer Network > カスタマイズ事例 > ミニサンプル:オリジナルの顧客検索画面を追加した例

ここでは、Wagby定義ファイルで作成した顧客モデルを検索するオリジナルの画面を作成してみます。

検索画面

アクションクラス

検索処理を行なうアクションクラスを次のように用意します。

package jp.jasminesoft.wagby.struts.pub;

import java.security.Permission;
import java.io.*;
import java.util.*;
import java.text.*;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.mail.internet.*;
import org.apache.struts.action.ActionForward;
import org.apache.log4j.Logger;
import jp.jasminesoft.util.*;
import jp.jasminesoft.jfc.*;
import jp.jasminesoft.jfc.tag.CheckLogonBase;
import jp.jasminesoft.jfc.menu.*;
import jp.jasminesoft.jfc.model.master.*;

/**
 * カスタマイズテスト
 */

public class MySearchAction extends DbFreeAction
{
    /** Logger クラスを準備します。 */
    private final static Logger logger =
        Logger.getLogger(MySearchAction.class.getName());

    /**
     * ここに処理を記述します。
     *
     * @param p DbActionParameter
     * @return ActionForward
     * @exception IOException
     * @exception ServletException
     * @exception SecurityException
     */
    public ActionForward do_free(DbActionParameter p)
        throws IOException, ServletException, SecurityException
    {
	// テキストフィールド name を受け取る
	String name_str = p.request.getParameter("name");
	p.request.setAttribute("name", name_str);

	// すでにメッセージ画面を一度表示しており、OK ボタンが
	// 押されたかどうかを判断する。
	if (getStatus().equals(p.referrer) &&
	    p.action != null && p.action.startsWith("Apply")) {

	    if (name_str == null || name_str.length() == 0) {
		p.errors.addJfcerror(errorManager.getJfcerror(
                    "name.null", p.locale));
		return (new ActionForward(p.mapping.getInput()));
	    }

	    return (p.mapping.findForward("result"));
	}

	// はじめてこのアクションを実行する。
	return (new ActionForward(p.mapping.getInput()));
    }
}
  • p.referrer には、直前の画面名(各アクションクラスにおける getStatus メソッドの値)が格納されます。これを用いることで、最初のアクセスなのかどうかを判断させることができます。
  • errorManager クラスの引数(エラーメッセージのキー)は、別のエラーメッセージリソースファイルで管理します。
  • カスタマイズしたファイルの文字コードは UTF-8 で保存します。

JSP ファイル

MySearchAction クラスに対応する JSP ファイルを次のように用意します。

<%@ page pageEncoding="UTF-8" errorPage="error.jsp" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>顧客検索</title>
</head>
<body>

<h1>顧客名を入力してください。</h1>

<c:import url="../parts/errormsg.jsp"/>

<form action="search.do" method="post">
<input type="text" name="name" value="<c:out value='${name}'/>"/>
<input type="submit" name="action_Apply" value="検索..."/>
</form>

</body>
</html>

errormsg.jsp は Wagby が提供しているエラーメッセージ表示用の JSP 部品です。

結果表示画面

アクションクラス

結果表示を行なうアクションクラスを次のように用意します。

import java.security.Permission;
import java.io.*;
import java.util.*;
import java.text.*;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.mail.internet.*;
import org.apache.struts.action.ActionForward;
import org.apache.log4j.Logger;
import jp.jasminesoft.util.*;
import jp.jasminesoft.jfc.*;
import jp.jasminesoft.jfc.tag.CheckLogonBase;
import jp.jasminesoft.jfc.menu.*;
import jp.jasminesoft.jfc.model.master.*;

import jp.jasminesoft.wagby.model.customer.*;
import jp.jasminesoft.wagby.model.customer_c.*;
import jp.jasminesoft.wagby.model.customer_p.*;

/**
 * 結果の出力
 */
public class MyResultAction extends DbFreeAction
{
    /** Logger クラスを準備します。 */
    private final static Logger logger =
        Logger.getLogger(MyResultAction.class.getName());

    /**
     * ここに処理を記述します。
     *
     * @param p DbActionParameter
     * @return ActionForward
     * @exception IOException
     * @exception ServletException
     * @exception SecurityException
     */
    public ActionForward do_free(DbActionParameter p)
        throws IOException, ServletException, SecurityException
    {
	// 検索条件 name_str を受け取る。
	String name_str = (String)p.request.getAttribute("name");

	if (name_str == null) {
	    return (new ActionForward(p.mapping.findForward("search")));
	}

	// 検索処理
	Customer[] customer_ary = null;
	ProcessBean pbean =
	    (ProcessBean)p.appctx.getBean("ShowListCustomerProcessBean");
	pbean.setActionParameter(p);

	CustomerC cond = new CustomerC();
	cond.setName(name_str);
	pbean.setParameter(ProcessBean.ConditionParamName, cond);
	ResultBean rbean = new ResultBean();
        try {
	    rbean.setProcessBean(pbean);
	    rbean.setSizePerPage(-1);
	    rbean.setWishCloseConnection(true);
	    rbean.processProcessBean(p, errorManager);

	    List coll = rbean.getCurrentPageItem(p, errorManager);
	    if (coll != null && coll.size() > 0) {
	        customer_ary = (Customer[])coll.toArray(new Customer[0]);
	    }
        } finally {
	    rbean.release();
        }
	CustomerP[] customer_p_ary = new CustomerP[customer_ary.length];
	for (int i=0; i<customer_ary.length; i++) {
	    CustomerP customer_p =
		((jp.jasminesoft.wagby.app.customer.CustomerPHelper)p.appctx.
		 getBean("CustomerPHelper")).
		s2p(customer_ary[i],
		    p,
		    jp.jasminesoft.wagby.app.customer.CustomerPHelper.SHOW);
	    customer_p_ary[i] = customer_p;
	}

	p.request.setAttribute("customer_p_ary", customer_p_ary);

	return (new ActionForward(p.mapping.getInput()));
    }
}
  • 検索処理には、自動生成されたプロセスビーンを利用しています。
  • ResultBean オブジェクトのメソッド setSizePerPage に -1 をセットすることで、全件取得を行っています。
  • JSP に送出する際には、ストアモデルをプレゼンテーションモデルに変換しています。

JSP ファイル

MyResultAction クラスに対応する JSP ファイルを次のように用意します。

<%@ page pageEncoding="UTF-8" errorPage="error.jsp" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>検索結果</title>
</head>
<body>

<h1>検索結果</h1>
<c:choose>
  <c:when test="${customer_p_ary != null}">
    <ul>
    <c:forEach items="${customer_p_ary}" var="customer_p">
    <li><c:out value="${customer_p_name.content}"/>
    </c:forEach>
  </ul>
  </c:when>
  <c:otherwise>
    見つかりません。
  </c:otherwise>
</c:choose>

<hr size="0"/>

<a href ="search.do">戻る</a>

</body>
</html>

エラーメッセージ設定

env/webpage/WEB-INF/classes フォルダの myerr_ja.properties.UTF8 ファイルを編集します。

name.null=検索条件が入力されていません。

struts-configファイル

public-flow.xml

env/webpage/WEB-INF/struts-config フォルダを用意し、独自に作成した画面遷移情報を public-flow.xml として保存した例を示します。(ファイル名は任意です。)

<?xml version="1.0" encoding="ISO-8859-1" ?>

<action path="/search"
  type="jp.jasminesoft.wagby.struts.pub.MySearchAction"
  input="/pub/search.jsp">
  <forward name="result" path="/result.do"/>
</action>

<action path="/result"
  type="jp.jasminesoft.wagby.struts.pub.MyResultAction"
  input="/pub/result.jsp">
  <forward name="search" path="/search.do"/>
</action>
</pre>

ダウンロード

このページで紹介したサンプルをダウンロードしてお試しいただくことができます。

  • pubsample.zip (466,694 byte)
    同 zip ファイルには次のファイルが含まれています。
    customize\webpage\pub\result.jsp
    customize\webpage\pub\search.jsp
    customize\webpage\WEB-INF\src\jp\jasminesoft\wagby\struts\pub\MyResultAction.java
    customize\webpage\WEB-INF\src\jp\jasminesoft\wagby\struts\pub\MySearchAction.java
    customize\webpage\WEB-INF\src\myerr_ja.properties.UTF8
    customize\webpage\WEB-INF\struts-config\public-flow.xml
    xls-model\pubsample.xls

ダウンロード後、次の手順に従ってお試しください。

  1. ダウンロードファイルを $(DEVHOME) に展開します。Wagby 定義ファイルならびにカスタマイズコードが上書きで配置されます。(なお、パッケージ名は「jp.jasminesoft.wagby」となっていますので、変更している方はご注意ください。)
  2. フルビルドを行います。

動作確認

ビルド後、通常の Wagby データベースのようにログオン、メニューから顧客モデルを選択し、顧客データを登録します。

その後、(ログオンした状態のまま)Web ブラウザのアドレスバーに直接「http://localhost:8921/wagby/search.do」と入力します。すると、オリジナル画面が表示されます。

インターネットオプションを用いることで、このオリジナル画面処理を「公開」部として(ログオン画面をとおさずに)利用させることができるようになります。

このページ

カスタマイズ事例