其实tiles框架的目的也是为了实现代码的复用。楼主的流程应该是可以的,不过关键是你如何定义tiles-definition.xml。这个在整个application中起很关键的作用。可以考虑在tiles-definition.xml中用继承,来简化jsp的定义。
tiles框架可以和struts很好的结合,你可以选择单单用struts中的Action,也可以用TilesAction。
如果撇开tiles,那么这个业务流程应该和纯struts没有什么区别。
tiles框架可以和struts很好的结合,你可以选择单单用struts中的Action,也可以用TilesAction。
如果撇开tiles,那么这个业务流程应该和纯struts没有什么区别。
<tiles:insert attribute='<%=request.getAttribute(Constants.ISSUE_BODY_LAYOUT)%>'/>
但是显示出错,好象<tiles:insert attribute>这个标签里不能在放jsp标签跟struts了吧?不知道应该怎么解决?
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"的值。应该有所启发吧。
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
<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(射手爱狮子) ”给予帮助,多谢~~~~!!!
另外,在jsp中加入以下这句
<tiles:importAttribute/>
加在 <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> 下。试试。
javax.servlet.jsp.JspException: Error - tag importAttribute : no tiles
context found.怎么回事啊?真是郁闷啊~~~
最近比较忙,帖子才结,多谢sagittarius1979(射手爱狮子) 的热情帮助~~~接分~~