我用sitemesh+sturts  <?xml version="1.0" encoding="GBK" ?> 
  <decorators defaultdir="/WEB-INF/decorators">
  <!--  在excludes元素下指定的页面将不会由SiteMesh来装饰 
  --> 
  <excludes /> 
  <!--  创建一个名为main的装饰器,该装饰器页面为main.jsp,
     用于装饰pattern指定的URL的所有页面
  --> 
  <decorator name="main" page="main.jsp">
  <pattern>/*.*</pattern> 
  </decorator>
  <!--  定义一个装饰器,但该装饰器默认不装饰任何页面 
  --> 
  <decorator name="panel" page="panel.jsp" /> 
  </decorators>不由SITEMESH管理的,放在 <excludes />里 
可是SITEMESH 不是以 页面为单位的 而是以 地址为单位,比如:
一个注册页面register.jsp 该页面你不想用sitemesh,就在 excludes里加上register.jsp。
地址栏打上 http:\\localhost:8080\xxx\register.jsp 正常没用使用sitemesh布局
由于处理验证注册是交给action来处理的,在struts.xml 设置为 registerprocess.do
当你提交这个页面的时候地址栏会变成http:\\localhost:8080\xxx\registerprocess.do这个时候 
这个页面就是由setemesh布局了 。一定要在sitemesh  excludes加上regiterprocess.do 才可以 
这样也太复杂了吧 ,还不如自己 include。
是不是有什么方法设置的啊 ?

解决方案 »

  1.   

    ruturn mapping.findForward("");
    可能会出现上面的情况..如果采用response.sendRedirect("");我用了这个,好像这个问题就不太会存在,这个相对比较简单,如果复杂的话可能有还会出现上面的状况吧
      

  2.   

    通常都是先进action再进jsp页面的,所以只要在sitemesh的excludes加上regiterprocess.do。
    如果要.do不加载装饰器,而且可以不进action而直接进jsp,并且也不加载装饰器,那就要在excludes里加上regiterprocess.do和register.jsp,或者像2楼说的用response.sendRedirect("");
    一个项目一般JSP文件是很多的,不需要加载装饰器的文件一般很少,这时用include显然不合理。
    SITEMESH是根据浏览器中的url来判断是否加载装饰器的
      

  3.   

    那一个简单的注册就要加载2个。  要是再加上权限控制的话。 地址栏是(regiterprocess.do)由于没权限网页已经跳转到了index.jsp。 这个时候index.jsp页面也不加载了。 这种情况怎么办?
      

  4.   

    在权限控制那判断下,如果没有权限,用response.sendredirect("***.do")重定向下,走另一个.do就可以了
      

  5.   

    就为了使用 SITEMESH要 弄这么多。  SITEMESH就没 以网页为单位的吗 ?