- PR -

StrutsのTilesでのレイアウトの入れ子について

1
投稿者投稿内容
さやべえ
常連さん
会議室デビュー日: 2003/03/13
投稿数: 33
投稿日時: 2003-12-17 19:19
さやべえです。

StrutsのTilesでの質問です。通常の使い方だと
コード:
<tiles:insert page="/WEB-INF/layouts/1.jsp" flush="true">
  <tiles:put name="hoge1" value="/WEB-INF/tiles/hoge1.jsp">
  <tiles:put name="hoge2" value="/WEB-INF/tiles/hoge2.jsp"/>
</tiles:insert>


のように1:1の関係になると思いますが、これを入れ子にすることは
できないのか?と悩んでおります。
コード:
<tiles:insert page="/WEB-INF/layouts/1.jsp" flush="true">
  <tiles:put name="hoge1" value="/WEB-INF/layouts/2.jsp">
    <tiles:put name="child1" value="/WEB-INF/tiles/child1.jsp"/>
    <tiles:put name="child2" value="/WEB-INF/tiles/child2.jsp"/>
  </tiles:put>
  <tiles:put name="hoge2" value="/WEB-INF/tiles/hoge2.jsp"/>
</tiles:insert>


↑もちろんこれは動きません(イメージをつかむためにわざと掲載しました)

概念的には、親レイアウトの1つのinsert枠に通常はタイルを割り当てるところを
子レイアウトを割り当て、子レイアウトのinsert枠に子用のタイルを割り当てる
ことをしたいと考えております。

なにか情報のお持ちの方、ご教授頂ければ幸いです。
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-12-17 19:57
definition を作っておいてこれを insert してみては?

// 確か出来たはずですけど、ちょっと自信ない・・・。
さやべえ
常連さん
会議室デビュー日: 2003/03/13
投稿数: 33
投稿日時: 2003-12-18 12:31
さやべえです。
コード:
<%@ include file="/WEB-INF/layouts/definition/LC001.jsp" %>

<tiles:insert page="/WEB-INF/layouts/parent/LP008.jsp" flush="true">
  <tiles:put name="title" type="String">メンバー登録</tiles:put>
  <tiles:put name="H10" beanName="child.LC001">
    <tiles:put name="H004" value="/WEB-INF/tiles/header/H1305.jsp"/>
  </tiles:put>
  <tiles:put name="C44" value="/WEB-INF/tiles/contents/C5500.jsp"/>
</tiles:insert>


definitionを使ってそれをH10にセットすることはできました。
但し、上記のように記述してもdefinitionのH004のinsertエリアがH1305.jspに
変わりませんでした。

後もう少しなのですが・・ どなたか解決方法がわかる方がいらっしゃいましたら
ご教授頂ければ幸いです。
さやべえ
常連さん
会議室デビュー日: 2003/03/13
投稿数: 33
投稿日時: 2003-12-18 18:15
こんばんわ。さやべえです。解決しました。

WEB-INF/tiles-defs.xmlにおいて
コード:
  <definition name="child.LC001" path="/WEB-INF/layouts/child/LC001.jsp">
    <put name="H001" value="/WEB-INF/tiles/header/H1000.jsp" />
    <put name="H002" value="/WEB-INF/tiles/header/H1100.jsp" />
    <put name="H003" value="/WEB-INF/tiles/header/H1200.jsp" />
    <put name="H004" value="/WEB-INF/tiles/header/H1300.jsp" />
  </definition>


のように定義しておきます。

そして、JSP内では
コード:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

<%--Definitionの継承--%>
<tiles:definition id="child.LC001.ext" extends="child.LC001">
  <tiles:put name="H004" value="/WEB-INF/tiles/header/H1305.jsp"/>
</tiles:definition>

<tiles:insert page="/WEB-INF/layouts/parent/LP001.jsp" flush="true">
  <tiles:put name="title" type="String">タイトル</tiles:put>
  <tiles:put name="H10" beanName="child.LC001.ext" />
  <tiles:put name="C44" value="/WEB-INF/tiles/contents/C001.jsp" />
  <tiles:put name="F50" value="/WEB-INF/tiles/footer/F001.jsp" />
</tiles:insert>


このようにすることで、うまくいきました。
取り急ぎ
1

スキルアップ/キャリアアップ(JOB@IT)