Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > オープンソース > Struts −6.logicタグライブラリ
更新日:2006/6/4
Struts−6.logicタグライブラリ
ここでは、Strutsで用意されているカスタムタグライブラリのうち、logicタグライブラリについて解説します。logicタグライブラリには繰返し処理、条件分岐、リダイレクト処理などを行うタグが定義されています。

実行環境
・WindowsXP Home Edition
・J2SDK 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4
使用例
ヘッダ情報、パラメータ情報を取得し、表示するプログラムを作成します。
【作成ファイル一覧】
ファイル名
内容
値を入力するForm画面をhtmlタグライブラリで作成します。
前ページで入力された値の条件分岐、繰返し処理をlogicタグライブラリで行います。
入力された値を保持するアクション・フォームBeanです。
アクション・クラスです。遷移先のファイルとして、exLogic2.jspを指定します。
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). taglibディレクティブで使用するタグライブラリを指定します。
(2). <html:text>タグを使用します。HTMLの<input type="text">とほぼ同様の動作をし、プロパティidCodeの値を入力します。
(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). taglibディレクティブで使用するタグライブラリを指定します。
(2). <logic:present>タグを使用します。属性で指定したプロパティ名、Cookie名、ヘッダ名、変数名が存在する場合、タグ内の処理を実行します。name属性にアクションフォーム・Beanを指定します。property属性にアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性にプロパティ値のスコープを指定します。
(3). <logic:notEmpty>タグを使用します。属性で指定したプロパティ名、変数名の値がNullでない場合、タグ内の処理を実行します。name属性にアクションフォーム・Beanを指定します。property属性にアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性にプロパティ値のスコープを指定します。
(4). <logic:equal>タグを使用します。属性で指定したプロパティ名、Cookie名、ヘッダ名、変数名の値が特定のキーワードと同じ場合、タグ内の処理を実行します。name属性にアクションフォーム・Beanを指定します。property属性にアクションフォーム・Bean内の該当するプロパティ名を指定します。scope属性にプロパティ値のスコープを指定します。 value属性に比較する特定のキーワードを指定します。
(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). ActionFormクラスをスーパークラスとして、LogicRegistrationFormクラスを宣言します。
(2). exLogic.jspで入力した値を保存する変数を宣言します。
(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). Actionクラスをスーパークラスとして、LogicRegistrationActionクラスを宣言します。
(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). <form-beans>タグでアクション・フォームBeanを指定します。
(2). <action-mappings>タグでアクション・クラス、関連するアクション・フォームBeanを指定します。
(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の値に指定した特定の値が含まれていないかどうかを判別します。
messagesPresent
requestスコープ内に指定したActionErrorsオブジェクト、ActionMessagesオブジェクト、Stringオブジェクト、String配列が存在するかどうかを判別します。
messagesNotPresent
requestスコープ内に指定したActionErrorsオブジェクト、ActionMessagesオブジェクト、Stringオブジェクト、String配列が存在しないかを判別します。
present
指定したBeanのプロパティ名、変数名、ヘッダ名、Cookie名が存在するかどうかを判別します。
notPresent
指定したBeanのプロパティ名、変数名、ヘッダ名、Cookie名が存在しないかを判別します。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道