<?xml version="1.0" encoding="UTF-8" ?>
<!--

    Copyright 2004-2010 the Seasar Foundation and the Others.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
    either express or implied. See the License for the specific language
    governing permissions and limitations under the License.

-->

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  version="2.0">

  <description>Cubby tag library</description>
  <display-name>Cubby tags</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>t</short-name>
  <uri>http://www.seasar.org/cubby/tags</uri>

  <tag>
    <description>
      <![CDATA[
      HTML の form タグを出力します。
      <p>
      t:input/t:select/t:textarea タグで参照するフォームオブジェクトを指定します。
      </p>
      ]]>
    </description>
    <name>form</name>
    <tag-class>org.seasar.cubby.tags.FormTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
      <description>
    	<![CDATA[
        フォームオブジェクトを指定します。
        ]]>
      </description>
      <name>value</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        アクションクラス、メソッドから action 属性を生成するためのアクションクラスを FQCN で指定します。
        <p>
        この属性を指定した場合は、必ず actionMethod 属性も指定してください。
        JSP 上に action 属性が指定してあった場合はこの属性から生成した URL で上書きされます。
        </p>
        <p>
        URL 埋め込みパラメータやクエリ文字列のパラメータが必要な場合は t:param タグをボディ部に指定してください。
        指定方法は t:link タグと同様です。
        </p>
        ]]>
      </description>
      <name>actionClass</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Class</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        アクションクラス、メソッドから action 属性を生成するためのアクションメソッドを指定します。
        <p>
        この属性を指定した場合は、必ず actionClass 属性も指定してください。
        </p>
        ]]>
      </description>
      <name>actionMethod</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        出力する URL を HttpServletResponse#encodeURL(String) でエンコードするかを指定します。デフォルトは true です。
        ]]>
      </description>
      <name>encodeURL</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Boolean</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        出力する URL のプロトコルを指定します。主にhttps/httpの切り替えに使用します。
        ]]>
      </description>
      <name>protocol</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        出力する URL のポートを指定します。
        ]]>
      </description>
      <name>port</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
    <example>
      <![CDATA[
[1] action 属性を JSP 上で指定する
(JSP)
<t:form action="${contextPath}/foo/bar" value="${action}">
  ...
</t:form>

(実行結果)
<form action="/(contextPath)/foo/var"&>
  ...
</form>

[2] action 属性をクラス、メソッドで指定する
(JSP)
<t:form actionClass="com.example.action.FooAction" actionMethod="bar" value="${action}">
  ...
</t:form>

(実行結果)
<form action="/(contextPath)/foo/var" >
  ...
</form>

[3] プロトコル(HTTPS)を指定する
(JSP)
<t:form actionClass="com.example.action.FooAction" actionMethod="bar" value="${action}" protocol="https">
  ...
</t:form>

(実行結果)
<form action="https://www.example.com/(contextPath)/foo/bar" >
  ...
</form>
	  ]]>
    </example>
  </tag>

  <tag>
    <description>
      <![CDATA[
      HTML の input タグを出力します。
      ]]>
    </description>
    <name>input</name>
    <tag-class>org.seasar.cubby.tags.InputTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
      <description>
        <![CDATA[
        この属性の値は type 属性としてそのまま出力されます。
        ]]>
      </description>
      <name>type</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        value 属性として出力する値を取得するフォームオブジェクトのプロパティ名を指定します。
        <p>
        この属性の値は name 属性としてそのまま出力されます。
        </p>
        ]]>
      </description>
      <name>name</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        この属性の値は value 属性としてそのまま出力されます。
        指定しなかった場合は name 属性で指定したフォームオブジェクトのプロパティから取得した値が value 属性として出力されます。
        <p>
        type 属性が radio/checkbox の場合は、この値と name 属性で指定したフォームオブジェクトのプロパティから取得した値(もしくは checkedValue で指定した値)が一致した場合には checked 属性が true になりますので、必ず指定するようにしてください。
        </p>
        ]]>
      </description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        type 属性が radio/checkbox の場合に、フォームオブジェクトの値よりも優先的に比較対象となる値を指定します。
        <p>
        この値と value 属性の値が一致した場合には checked 属性が true になります。
        </p>
        ]]>
      </description>
      <name>checkedValue</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        name 属性で指定したフォームオブジェクトのプロパティに複数の値がある場合に、何番目の要素なのかを指定します。
        ]]>
      </description>
      <name>index</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
    <example>
      <![CDATA[
(JSP)
<t:input name="title"/>

(実行結果)
<input name="title" value="Todo Title"/>
      ]]>
    </example>
  </tag>

  <tag>
    <description>
      <![CDATA[
      HTML の select タグと option タグを出力します。
      ]]>
    </description>
    <name>select</name>
    <tag-class>org.seasar.cubby.tags.SelectTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
      <description>
        <![CDATA[
        selected 属性を付加する option タグを決めるための値を取得するプロパティ名を指定します。
        <p>
        この属性の値は name 属性としてそのまま出力されます。
        </p>
        ]]>
      </description>
      <name>name</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        option タグの内容を表すリストを指定します。
        <p>
        配列や java.util.Collection、java.util.Map 型が指定できます。
        </p>
        ]]>
      </description>
      <name>items</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        items 属性で指定したリストの要素から、option タグの表示文字列として使用するプロパティ名を指定します。
        <p>
        items 属性で指定した型が java.util.Map の場合は無視されます。
        </p>
        ]]>
      </description>
      <name>labelProperty</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        items 属性で指定したリストの要素から、option タグの値として使用するプロパティ名を指定します。
        <p>
        items 属性で指定した型が java.util.Map の場合は無視されます。
        </p>
        ]]>
      </description>
      <name>valueProperty</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        空白の option タグを出力するかどうかを指定します。
        <p>
        省略した場合は true と見なして先頭に空白の option タグが出力されます。
        </p>
        ]]>
      </description>
      <name>emptyOption</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Boolean</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        空白の option タグの表示文字列を指定します。
        <p>
        省略した場合は何も表示されません。
        </p>
        ]]>
      </description>
      <name>emptyOptionLabel</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
    <example>
      <![CDATA[
(JSP)
<t:select name="typeId" items="${todoTypes}" labelProperty="name" valueProperty="id"/>

(実行結果)
<select name="typeId">
  <option value="1">TodoType 1</option>
  <option value="2">TodoType 2</option>
</select>
      ]]>
    </example>
  </tag>

  <tag>
    <description>
      <![CDATA[
      HTML の textarea タグを出力します。
      ]]>
    </description>
    <name>textarea</name>
    <tag-class>org.seasar.cubby.tags.TextareaTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
      <description>
        <![CDATA[
        value 属性として出力する値を取得するフォームオブジェクトのプロパティ名を指定します。
        <p>
        この属性の値は name 属性としてそのまま出力されます。
        </p>
        ]]>
      </description>
      <name>name</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        この属性の値は value 属性としてそのまま出力されます。
        <p>
        指定しなかった場合は name 属性で指定したフォームオブジェクトのプロパティから取得した値が value 属性として出力されます。
        </p>
        ]]>
      </description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        name 属性で指定したフォームオブジェクトのプロパティに複数の値がある場合に、何番目の要素なのかを指定します。
        ]]>
      </description>
      <name>index</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
    <example>
      <![CDATA[
(JSP)
<t:textarea name="memo"/>

(実行結果)
<textarea name="memo">Memo 1</textarea>
      ]]>
    </example>
  </tag>

  <tag>
    <description>
      <![CDATA[
      2重サブミット防止用の input タグ(type="hidden")を出力します。
      ]]>
    </description>
    <name>token</name>
    <tag-class>org.seasar.cubby.tags.TokenTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
      <description>
        <![CDATA[
        value 属性として出力する値を取得するフォームオブジェクトのプロパティ名を指定します。
        <p>
        この属性の値は name 属性としてそのまま出力されます。
        name 属性が省略された場合の初期値は「cubby.token」です。
        </p>
        ]]>
      </description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
    <example>
      <![CDATA[
(JSP)
<t:form value="${action}">
  <t:token / >
<t:/form>

(実行結果)
<form>
  <input type="hidden" name="cubby.token" value="ランダムな文字列...">
</form>

(アクション)
public class TokenAction extends Action {
  ...
  public ValidationRules validation = new DefaultValidationRules() {
  @Override
    public void initialize() {
      add("cubby.token", new TokenValidator());
    }
  };
  ...
  @Form
  @Validation(errorPage="token.jsp", rules = "validation")
  public ActionResult message() {
    return new Forward("result.jsp");
  }
        
}
      ]]>
    </example>
  </tag>

  <tag>
    <description>
      <![CDATA[
      アクションクラス名、アクションメソッド名から URL を出力します。
      <p>
      ボディ部に t:param タグ置くことで、URL 埋め込みのパラメータやクエリ文字列のパラメータを指定することができます。
      </p>
      ]]>
    </description>
    <name>link</name>
    <tag-class>org.seasar.cubby.tags.LinkTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
      <description>
        <![CDATA[
        URL を a や img など、指定された HTML タグの属性として出力します。
        <p>
        この属性を指定したときは、必ず attribute 属性も指定してください。
        </p>
        ]]>
      </description>
      <name>tag</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        tag 属性が指定された時に、a なら href、img なら src など、タグのどの属性に URL を出力するかを指定します。
        <p>
        tag 属性を指定したときは必ず指定してください。
        </p>
        ]]>
      </description>
      <name>attr</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Class</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        FQCN 形式でアクションクラスを指定します。
        ]]>
      </description>
      <name>actionClass</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        アクションメソッドを指定します。
        ]]>
      </description>
      <name>actionMethod</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        出力する URL を HttpServletResponse#encodeURL(String) でエンコードするかを指定します。デフォルトは true です。
        ]]>
      </description>
      <name>encodeURL</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Boolean</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        出力する URL のプロトコルを指定します。主にhttps/httpの切り替えに使用します。
        ]]>
      </description>
      <name>protocol</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        出力する URL のポートを指定します。
        ]]>
      </description>
      <name>port</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Integer</type>
    </attribute>
    <dynamic-attributes>true</dynamic-attributes>
    <example>
      <![CDATA[
[1] URL をそのまま出力
(JSP)
<t:link actionClass="com.example.action.FooAction" actionMethod="bar" />

(実行結果)
/(contextPath)/foo/bar

[2] URL を a タグに出力
(JSP)
<t:link actionClass="com.example.action.FooAction" actionMethod="bar"
        tag="a" attr="href">
    link to action
</t:link>

(実行結果)
<a href="/(contextPath)/foo/bar">
    link to action
</a>

[3] パラメータ指定 (アクションメソッドに @Path("baz/{id}") という指定があった場合)
(JSP)
<t:link actionClass="com.example.action.FooAction" actionMethod="bar"
        tag="a" attr="href">
    <t:param name="id" value="123" />
    <t:param name="token" value="abc" />
    link to action
</t:link>

(実行結果)
<a href="/(contextPath)/foo/bar/123&token=abc">
    link to action
</a>

[4] プロトコル(HTTPS)を指定して出力
(JSP)
<t:link actionClass="com.example.action.FooAction" actionMethod="bar" protocol="https"/>

(実行結果)
https://www.example.com/(contextPath)/foo/bar
      ]]>
    </example>
  </tag>

  <tag>
    <description>
      <![CDATA[
      t:form、t:link のボディ部でパラメータを指定するためのタグです。
      ]]>
    </description>
    <name>param</name>
    <tag-class>org.seasar.cubby.tags.ParamTag</tag-class>
    <body-content>scriptless</body-content>
    <attribute>
      <description>
        <![CDATA[
        パラメータ名です。
        ]]>
      </description>
      <name>name</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
    <attribute>
      <description>
        <![CDATA[
        パラメータの値です。
        <p>
        この属性が指定されていない場合はボディ部を値として使用します。
        </p>
        ]]>
      </description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.String</type>
    </attribute>
  </tag>

</taglib>
