其实tiles框架的目的也是为了实现代码的复用。楼主的流程应该是可以的,不过关键是你如何定义tiles-definition.xml。这个在整个application中起很关键的作用。可以考虑在tiles-definition.xml中用继承,来简化jsp的定义。
tiles框架可以和struts很好的结合,你可以选择单单用struts中的Action,也可以用TilesAction。
如果撇开tiles,那么这个业务流程应该和纯struts没有什么区别。

解决方案 »

  1.   

    <tiles:insert attribute='bodyIndex'/>我现在想让上面的bodyIndex是动态的,通过前面的action得到的名称,我是这个样子作的:
    <tiles:insert attribute='<%=request.getAttribute(Constants.ISSUE_BODY_LAYOUT)%>'/>
    但是显示出错,好象<tiles:insert attribute>这个标签里不能在放jsp标签跟struts了吧?不知道应该怎么解决?
      

  2.   

    我给你一个思路看看能不能解决:
    a.jsp中 :
    <tiles:insert page="/layout/layout.jsp"  controllerUrl="/MyTilesAction.do">
    <tiles:put name="title" value="C's titles"/>
    <tiles:put name="header" value="/common/header.jsp"/>
    <tiles:put name="body" value="/common/body.jsp"/>
    <tiles:put name="footer" value="/common/footer.jsp"/>
    </tiles:insert>struts-config.xml中
      <action-mappings>
        <action path="/MyTilesAction" type="jp.co.sis.tilesAction" />
      </action-mappings> 用tilesAction。
    import org.apache.struts.tiles.actions.TilesAction;
    public ActionForward perform(ComponentContext context,            ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
    throws IOException,ServletException
    {
    System.out.println("========= in bAction.perform() ==========");
    String sTitle = (String)context.getAttribute("title");          context.putAttribute("title","My title");
    return null;
        }
    那么在显示a.jsp是title显示的是“My title“同样可以更改"header","body","footer"的值。应该有所启发吧。
      

  3.   

    上面的 controllerUrl="/MyTilesAction.do"会在a.jsp显示之前发挥作用。
      

  4.   

    不行,试了半天,还是报错~~~你能把你的哪个action的详细代码写出来吗?
      

  5.   

    我的具体代码:
    struts-config:
    <action path="/TilesArticleViewAction" type="com.issue.TilesArticleViewAction" />a.jsp:<%@ page contentType="text/html" language="java"%>
    <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    <tiles:insert page="/layouts/issue/bodymainlayout.jsp" controllerUrl="/TilesArticleViewAction.do">
    <tiles:put name="searchBox" value="bbbbb"/>
    </tiles:insert>bodymainlayout.jsp:<%@ page contentType="text/html" language="java" %>
    <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    <tiles:insert attribute="searchBox"/>TilesArticleViewAction.java:package com.issue;import java.sql.*;
    import java.io.IOException;
    import java.util.*;
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.util.*;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionServlet;
    import org.apache.struts.tiles.actions.TilesAction;
    import org.apache.struts.tiles.*;
    import org.apache.struts.tiles.TilesUtil;import com.util.*;
    import com.business.issue.*;
    import com.BaseAction;
    public class TilesArticleViewAction extends TilesAction {   public ActionForward doExecute(ComponentContext context,
         ActionMapping mapping,
                                     ActionForm form,
                                     HttpServletRequest request,
                                     HttpServletResponse response)
       throws IOException, ServletException, Exception {
      
    context.putAttribute("searchBox","aaaaa");
      
       return null;
       }
    }为什么运行后显示Can't insert page 'bbbbb' : /agebusiness/layouts/issue/bbbbb
      

  6.   

    我上面发生的问题,知道是怎么回事了~~哪个aaaaa要在tiles-defs.xml配置相关的definition才能找到要嵌入的页面,修改如下:a.jsp页面:
    <tiles:put name="searchBox" value="bbbbb"/>改为:
    <tiles:put name="searchBox" value="/issue/b.jsp"/>TilesArticleViewAction:
    context.putAttribute("searchBox","aaaaa");改为:
    context.putAttribute("searchBox","/issue/c.jsp");那么在调用a.jsp的时候,按照“sagittarius1979(射手爱狮子) ”的观点,应该调用c.jsp这个页面啊,可实际上调用的是b.jsp的页面,a.jsp页面并没有因为TilesArticleViewAction中对searchBox的设定做相应改变啊?不知道什么原因~~~请“sagittarius1979(射手爱狮子) ”给予帮助,多谢~~~~!!!
      

  7.   

    楼主我在程序中改变title的值是的的确确可以的,你也可以试试。如果不行那么就是程序的问题。
    另外,在jsp中加入以下这句
     <tiles:importAttribute/>
    加在 <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> 下。试试。
      

  8.   

    :(一加那句<tiles:importAttribute/>就显示
    javax.servlet.jsp.JspException: Error - tag importAttribute : no tiles
    context found.怎么回事啊?真是郁闷啊~~~
      

  9.   

    呵呵!我也没遇见过这个错误,把struts-config.xml,tiles-definition.xml贴出来看看。
      

  10.   

    问题解决~~~~jsp中加<tiles:insert definition="issue.indexLayout" flush="true" />layout中加<tiles:importAttribute/><tiles:insert attribute='main' />action中不变之前我把<tiles:importAttribute/>部分加到jsp中了,地方不对~~~:)呵呵~~~
    最近比较忙,帖子才结,多谢sagittarius1979(射手爱狮子) 的热情帮助~~~接分~~