找不到left,right是因为你的以下布局里没有这两个属性。
/layouts/baseLayout.jsp这些是对的,其他都错。
-----------------------------------------------
<definition name=".baseLayout" path="/layouts/baseLayout.jsp">
<put name="header" path="/common/header.jsp">
<put name="footer" path="/common/header.jsp">
<put name="content">
</definition>
<definition name=".simple" path="/common/simple.jsp">
<put name="content" path="/common/simple.jsp">
</definition>
<definition name=".leftRight" path="/common/leftRight.jsp">
<put name="left">
<put name="right">
</definition><definition name=".baseLeftRight" extends=".baseLayout">
<put name="content" path=".leftRight">
</definition>你试试转发到.baseLeftRight,应该可以。这个应该是一个对left,right的布局
/common/leftRight.jsp这是错的,.baseLayout布局里没有left属性,怎么能找到。其他类似
----------------------------------------
<definition name=".base1" extends=".baseLayout">
<put name="left" path="/base1/left.jsp">
</definition>如果想定义left,应该扩展.leftRight,它才有left属性
-----------------------------------------
<definition name=".base1" extends=".leftRight">
<put name="left" path="/base1/left.jsp">
</definition>

解决方案 »

  1.   

    谢谢回复,可以认为我知道错误的原因,但不知道该怎样定义才能达到目的。
    如下定义,固然是可以的:
    definition name=".base1" extends=".leftRight">
    <put name="left" path="/base1/left.jsp">
    </definition>
    但这样就丢失了.baseLayout定义的元素。事实上,.leftRight只是一个局部定义。注意,我并不想在/common/leftRight.jsp中重复一遍/layouts/baseLayout.jsp的代码。
      

  2.   

    嗯,发现我最开始写的一处笔误,.simple应该扩展.baseLayout,改为:
    <definition  name=".simple"  extends=".baseLayout">  
               <put  name="content"  path="/common/simple.jsp">  
    </definition>
      

  3.   

    没有丢失阿。
    如果你想做一个左右分割的布局,这样做。比如第一个程序:<definition name=".myLeftRightLayout1" extends=".baseLayout">
       <put name="content" path=".myLeftRight1">
    </definition><definition name=".myLeftRight1" extends=".leftRight">
    <put name="left"  path="left.jsp">
    <put name="right" path="right.jsp">
    </definition>之后转发就发给.myLeftRightLayout1第二个程序:
    <definition name=".myLeftRightLayout2" extends=".baseLayout">
       <put name="content" path=".myLeftRight2">
    </definition><definition name=".myLeftRight2" extends=".leftRight">
    <put name="left"  path="left.jsp">
    <put name="right" path="right.jsp">
    </definition>之后转发就发给.myLeftRightLayout2
      

  4.   

    哦,有点明白了,不过,这样的结果是不是意味着我没增加一个页面,都需要增加2个deinition?!这应该是不合理的。
      

  5.   

    或者你可以这样在基本layout里增加left,right的布局,并增加一个判断。
    判断是否right这个属性被设置值
    比如right的布局。先import这些属性,例如:right,主意加ignore="true",意思是right可以不要。
    <tiles:importAttribute name="right" ignore="true"/>之后再布局里使用logic:present来判断是否存在。
              <logic:present name="right">
              <td valign="top"  align="left">
                <tiles:insert attribute="right" ignore="true"/>
              </td>
              </logic:present>
    ------------------------------
    之后每增加一个页面就定义一个definition 就行。也就是baseLayout其实已经有了。<definition name=".myLeftRightLayout1" extends=".baseLayout">
       <put name="right" path="right.jsp">
       <put name="left" path="left.jsp">
    </definition>
      

  6.   

    汗,实在不得已,我是已经在打算另外写一个baseLeftRightLayout.jsp。不过难道就没有更好的办法吗?在jsp文件里来进行布局判断,我认为是违背了tiles本身的意图。我这个问题本身是一种很典型的思路,应该很流畅就能表示出来才是。
      

  7.   

    这应该是tiles的不足之处.
    期待它改进罗.
    或者你再研究tile的文档