PGBox
P
G
Box

nestedタグライブラリとは

nestedタグのメニューへ戻る



使用した環境
JDK 6 Update 11
struts 1.3.10

nestedタグライブラリの概要です。


nestedタグライブラリは、ネスト構造からのbean取得をサポートする事により
strutsの各種のタグを、より簡単に使用するためのタグライブラリです。

nestedタグライブラリを使用する事により、JSPを簡潔に記述する事ができるようになります。


例えば、フォーム「SampleForm」というフォームにList型のプロパティを保持しており、
その内容の一覧表示を行うには、通常であれば以下のように記述します。
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<html:form action="/xxx">
    
    検索結果:<bean:write name="SampleForm" property="rowCount" />件<br />
    <br />
    
    <table>
        <tr>
            <th>項目A</th>
            <th>項目B</th>
            <th>項目C</th>
        </tr>
        <logic:iterate id="list" name="SampleForm" property="xxx">
            <tr>
                <td>
                    <bean:write name="list" property="xxx" />
                </td>
                <td>
                    <bean:write name="list" property="xxx" />
                </td>
                <td>
                    <%-- 条件がある場合 --%>
                    <logic:equal name="list" property="xxx" value="xxx">
                        case1
                    </logic:equal>
                    <logic:notEqual name="list" property="xxx" value="xxx">
                        case2
                    </logic:notEqual>
                </td>
            </tr>
        </logic:iterate>
    </table>
    
</html:form>


nestedタグライブラリを使用すると、以下のように記述できるようになります。
<%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>
<nested:form action="/xxx">
    
    検索結果:<nested:write property="rowCount" />件<br />    <%-- (1) --%>
    <br />

    <table>
        <tr>
            <th>項目A</th>
            <th>項目B</th>
            <th>項目C</th>
        </tr>
        <nested:iterate property="xxx">
            <tr>
                <td>
                    <nested:write property="xxx" />        <%-- (2) --%>
                </td>
                <td>
                    <nested:write property="xxx" />
                </td>
                <td>
                    <%-- 条件がある場合 --%>
                    <nested:equal property="xxx" value="xxx">    <%-- (3) --%>
                        case1
                    </nested:equal>
                    <nested:notEqual property="xxx" value="xxx">
                        case2
                    </nested:notEqual>
                </td>
            </tr>
        </nested:iterate>
    </table>
    
</nested:form>


name="xxx"の記述がJSP上からなくなっている事が分かると思います。

また、iterateで繰り返しを行う際に、<logic:iterate>の場合はid属性でループ中のbeanの名前を定義する必要がありますが、
<nested:iterate>ではid属性の指定は必要なくなります。<nested:iterate>にネストされた<nested:write />は、自動的にループ中のbeanを参照するようになります。

(1)では、親タグである<nested:form>つまりフォームの「rowCount」プロパティが参照されます。
(2)と(3)では、親タグである<nested:iterate>でループ中のbeanのプロパティが参照されます。
つまり、nestedタグライブラリとは、ネストしている親タグのbeanが自動的に参照されるようになる拡張タグです。


nestedタグを使用する事によりJSPの記述量は減り、JSPの可読性と開発効率が高まります。
また、name属性を省略する事でフォーム名をJSP上に記述しなくてよくなるので、メンテナンス性も高まります。
また、一度作成したJSPを再利用しやすくなります。


nestedタグライブラリでは、name属性がサポートされていない訳ではありませんので、フォームからではなく
直接beanを取得する場合などは
<nested:iterate name="xxx" property="xxx">
と記述する事も可能です。


以下は、nestedタグライブラリで拡張されている他のstrutsタグライブラリの一覧です。
各nestedタグの実装は、拡張元のタグを継承して作成されています。
beanを取得する際に、name属性が省略されている場合は親タグから取得するように拡張されている事意外に、継承元と機能面の違いはありません。
詳細な情報が必要な場合はリンク先の説明を参照してください。

nestedタグ継承元
nested:writebean:write
nested:definebean:define
nested:sizebean:size
nested:messagebean:message
nested:iteratelogic:iterate
nested:emptylogic:empty
nested:notEmptylogic:notEmpty
nested:equallogic:equal
nested:notEquallogic:notEqual
nested:greaterEquallogic:greaterEqual
nested:greaterThanlogic:greaterThan
nested:lessEquallogic:lessEqual
nested:lessThanlogic:lessThan
nested:matchlogic:match
nested:notMatchlogic:notMatch
nested:presentlogic:present
nested:notPresentlogic:notPresent
nested:messagesPresentlogic:messagesPresent
nested:messagesNotPresentlogic:messagesNotPresent
nested:imghtml:img
nested:linkhtml:link
nested:errorshtml:errors
nested:messageshtml:messages
nested:formhtml:form
nested:submithtml:submit
nested:imagehtml:image
nested:texthtml:text
nested:radiohtml:radio
nested:checkboxhtml:checkbox
nested:multiboxhtml:multibox
nested:selecthtml:select
nested:optionshtml:options
nested:optionsCollectionhtml:optionsCollection
nested:hiddenhtml:hidden
nested:filehtml:file
nested:passwordhtml:password
nested:textareahtml:textarea







nestedタグのメニューへ戻る