Javaに関する様々な情報をご紹介します。

6logicタグライブラリ

Javaに関する様々な情報をご紹介します。

logicタグライブラリ

ここでは、Strutsで用意されているカスタムタグライブラリのうち、logicタグライブラリについて解説します。logicタグライブラリには繰返し処理、条件分岐、リダイレクト処理などを行うタグが定義されています。

実行環境
  • ・WindowsXP Home Edition
  • ・J2SDK 1.4.2_04
  • ・Tomcat 5.0.18
  • ・Struts 1.2.4

使用例

ヘッダ情報、パラメータ情報を取得し、表示するプログラムを作成します。

作成ファイル一覧

ファイル名 内容
exLogic.jsp 値を入力するForm画面をhtmlタグライブラリで作成します。
exLogic2.jsp 前ページで入力された値の条件分岐、繰返し処理をlogicタグライブラリで行います。
LogicRegistrationForm.java 入力された値を保持するアクション・フォームBeanです。
LogicRegistrationAction.java アクション・クラスです。遷移先のファイルとして、exLogic2.jspを指定します。
struts-config.xml Strutsプログラムの定義ファイルです。

【exLogic.jsp】htmlタグライブラリを使用して、Form画面を作成します。

<%@ page contentType="text/html; charset=Shift_JIS" %>
<%-- (1)タグライブラリの指定 --%>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
    <head><title>logicタグライブラリ</title></head>
    <body>
    logicタグライブラリ サンプル1
    <html:form action="/LogicRegistration">
        IDコード
        <br>
        <%-- (2)<html:text>タグの使用 --%>
        <html:text property="idCode" />
        <br><br>
        スポーツ
        <br>
        <%-- (3)<html:multibox>タグの使用 --%>
            <html:multibox property="hobby" value="baseball"/>野球
            <html:multibox property="hobby" value="soccer"/>サッカー
            <html:multibox property="hobby" value="tennis"/>テニス
            <html:multibox property="hobby" value="golf"/>ゴルフ
            <br>
            <html:multibox property="hobby" value="pingpong"/>卓球
            <html:multibox property="hobby" value="basket"/>バスケット
            <html:multibox property="hobby" value="volley"/>バレー
            <html:multibox property="hobby" value="rugby"/>ラグビー
            <br><br>
            <html:submit property="submit" value="送信"/>
    </html:form>

    </body>
</html:html>
  1. (1)taglibディレクティブで使用するタグライブラリを指定します。
  2. (2)<html:text>タグを使用します。HTMLの<input type="text">とほぼ同様の動作をし、プロパティidCodeの値を入力します。
  3. (3)<html:multibox>タグを使用します。HTMLの<input type="checkbox">とほぼ同様の動作をします。

【exLogic2.jsp】logicタグライブラリを使用し、前ページで入力された値の条件分岐、繰返し処理を行うプログラムです。

<%@ page contentType="text/html; charset=Shift_JIS" %>
<%-- (1)タグライブラリの指定 --%>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<html:html>
<head><title>logicタグライブラリ</title></head>
<body>

logicタグライブラリ サンプル1
<br><br>
実行結果
<br><br>
<%-- (2)<logic:present>タグの使用 --%>
<logic:present name="LogicRegistrationForm"
        property="idCode" scope="request">
    ・プロパティidCodeは存在しています。<br>
</logic:present>

<%-- (3)<logic:notEmpty>タグの使用 --%>
<logic:notEmpty name="LogicRegistrationForm"
        property="idCode" scope="request">
    ・プロパティidCodeは入力済みです。<br>
</logic:notEmpty>

<%-- (4)<logic:equal>タグの使用 --%>
<logic:equal name="LogicRegistrationForm" property="idCode"
        scope="request" value="Java">
    ・idCodeはJavaです。<br>
</logic:equal>
<br>
スポーツ
<br>
<%-- (5)<logic:iterate>タグの使用 --%>
<logic:iterate id="element" name="LogicRegistrationForm"
        property="hobby" scope="request">
    ・<bean:write name="element"/><br>
</logic:iterate>

</body>
</html:html>
  1. (1)taglibディレクティブで使用するタグライブラリを指定します。
  2. (2)<logic:present>タグを使用します。属性で指定したプロパティ名、Cookie名、ヘッダ名、変数名が存在する場合、タグ内の処理を実行します。name属性にアクションフォーム・Beanを指定します。property属性にアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性にプロパティ値のスコープを指定します。
  3. (3)<logic:notEmpty>タグを使用します。属性で指定したプロパティ名、変数名の値がNullでない場合、タグ内の処理を実行します。name属性にアクションフォーム・Beanを指定します。property属性にアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性にプロパティ値のスコープを指定します。
  4. (4)<logic:equal>タグを使用します。属性で指定したプロパティ名、Cookie名、ヘッダ名、変数名の値が特定のキーワードと同じ場合、タグ内の処理を実行します。name属性にアクションフォーム・Beanを指定します。property属性にアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性にプロパティ値のスコープを指定します。 value属性に比較する特定のキーワードを指定します。
  5. (5)<logic:iterate>タグを使用します。配列、コレクションの要素を順に繰返し処理を行います。id属性に、各要素が代入される変数を指定します。name属性にアクションフォーム・Beanを指定します。property属性にアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性にプロパティ値のスコープを指定します。 <bean:write>を使用してid属性で指定された変数の値を表示しています。

【LogicRegistrationForm.java】exLogic.jspで入力した値を保存、取得するメソッドを提供するアクション・フォームBeanを作成します。

package struts;

import org.apache.struts.action.*;

//(1)LogicRegistrationFormクラスの宣言
public final class LogicRegistrationForm extends ActionForm {

    //(2)プロパティ値を保持する変数の宣言
    private String idCode;
    private String[] hobby;

    //(3)プロパティ値のアクセスメソッドの宣言
    public void setIdCode(String idCode) {this.idCode = idCode;}
    public String getIdCode() {return idCode;}
    public void setHobby(String[] hobby) {this.hobby = hobby;}
    public String[] getHobby() {return hobby;}

}
  1. (1)ActionFormクラスをスーパークラスとして、LogicRegistrationFormクラスを宣言します。
  2. (2)exLogic.jspで入力した値を保存する変数を宣言します。
  3. (3)プロパティ値のアクセスメソッドを宣言します。setXxxメソッドでプロパティ値を保存します。getXxxメソッドでメソッドが呼ばれたとき、プロパティ値を返します。

【LogicRegistrationAction.java】今回のアクション・クラスでは特に何の処理も行わず、exLogic2.jspを呼び出します。

package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;

//(1)LogicRegistrationActionクラスの宣言
public final class LogicRegistrationAction extends Action {
    public ActionForward execute(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest req,
            HttpServletResponse res) {

        //(2)exLogic2.jspの呼び出し
        return (mapping.findForward("success"));
    }
}
  1. (1)Actionクラスをスーパークラスとして、LogicRegistrationActionクラスを宣言します。
  2. (2)findForwardメソッドを使用して、exLogic2.jspを呼び出します。"success"とexLogic2.jspのマッピングはstruts-config.xmlに定義します。

【struts-config.xml】

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

    <!-- (1)アクション・フォームBeanの指定 -->
    <form-beans>
        <form-bean
                    name="LogicRegistrationForm"
                    type="struts.LogicRegistrationForm"/>
    </form-beans>

    <!-- (2)アクション・クラスの振る舞いを指定 -->
    <action-mappings>
        <action path="/LogicRegistration"
                    type="struts.LogicRegistrationAction"
                    name="LogicRegistrationForm"
                    scope="request">
            <!-- (3)アクション・クラス実行後の遷移先を指定 -->
            <forward name="success" path="/exLogic2.jsp"/>
        </action>
    </action-mappings>

</struts-config>
  1. (1)<form-beans>タグでアクション・フォームBeanを指定します。
  2. (2)<action-mappings>タグでアクション・クラス、関連するアクション・フォームBeanを指定します。
  3. (3)<forward>タグでアクション・クラス実行後に返された値"success"に合致する遷移先(exLogic2.jsp)を指定します。

【実行結果】Strutsの実行方法に関してはJavaの道:Struts(基本操作)を参照してください。

Struts_実行結果_1
Struts_実行結果_2

logicタグライブラリ一覧

logicタグライブラリで定義されているタグの一覧です。詳細な使用方法に関しては、以下のJakarta Projectのドキュメントをご参照ください。
Strutsドキュメント(logicタグライブラリ):http://struts.apache.org/userGuide/struts-logic.html

タグ 内容
empty 指定したBeanのプロパティ、変数がNullかどうかを判別します。
notEmpty 指定したBeanのプロパティ、変数がNullでないかを判別します。
equal 指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値と同一かどうかを判別します。
notEqual 指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値と異なっているかどうかを判別します。
forward struts-config.xmlの<global-forwards>エレメントに指定したページへフォワードを行います。
redirect 指定したページにリダイレクトを行います。
greaterEqual 指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値以上かどうかを判別します。
greaterThan 指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値より大きいかどうかを判別します。
lessEqual 指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値以下かどうかを判別します。
lessThan 指定したBeanのプロパティ、変数、ヘッダ、Cookieの値が指定した特定の値より小さいかどうかを判別します。
iterate 配列、コレクションの各要素の繰返し処理を行います。
match 指定したBeanのプロパティ、変数、ヘッダ、Cookieの値に指定した特定の値が含まれているかどうかを判別します。
notMatch 指定したBeanのプロパティ、変数、ヘッダ、Cookieの値に指定した特定の値が含まれていないかどうかを判別します。
messages
Present
requestスコープ内に指定したActionErrorsオブジェクト、ActionMessagesオブジェクト、Stringオブジェクト、String配列が存在するかどうかを判別します。
messages
NotPresent
requestスコープ内に指定したActionErrorsオブジェクト、ActionMessagesオブジェクト、Stringオブジェクト、String配列が存在しないかを判別します。
present 指定したBeanのプロパティ名、変数名、ヘッダ名、Cookie名が存在するかどうかを判別します。
notPresent 指定したBeanのプロパティ名、変数名、ヘッダ名、Cookie名が存在しないかを判別します。

6logicタグライブラリ