具体点吧:
我的index.jsp是一个首页,里面有一块内容是announcement(公告),是通过announcement.jsp连接的。
如果我就直接在index.jsp中写<jsp:include page="announcement.jsp">是可以解决问题,可是好像脱离了
MVC的三层框架,我以前只写过关于表单提交,然后表单FORM,再通过action来处理,
可是在这个地方,没有表单,我不知道怎么通过控制层。
请各位帮忙。。

解决方案 »

  1.   

    恩。不想用include。该怎么办。在线等。
      

  2.   

    这没什么问题的,include只是把那个页包了进来,不是跳转呀。 不过要注意b.jsp用到的数据,比如就request中夹过来的。 在action里要给它准备好。如果你的b.jsp是一个每个页都要用来的东西,那你就写个actionbase的类,把它用到的数据准备好,其它的subaction就不用每次再去准备了。
      

  3.   

     <jsp:include page="b.jsp" flush="true"> 
      

  4.   

    4楼的,我就想问那个数据怎么个从request过来,如何在action中准备好。?
    这是b.jsp中的内容
    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %><%@ page
    import="org.djx.hibernate.bo.Announcement,org.djx.hibernate.dao.AnnouncementDAO,
       org.djx.hibernate.factory.Factory"%><html>
    <head>
    <title>My JSP 'announcement.jsp' starting page</title>
    </head> <body>
    <marquee direction="up" scrollamount=2 height="95" width="345"
    onmouseover=stop() onmouseout=start()>
    <table width="340" height="90" border="0" cellpadding="0" cellspacing="0"> <%
    AnnouncementDAO dd = new Factory().getAnnouncementDAOInstance();
    List list = dd.queryAllAnnouncement();
    session.setAttribute("dd",list);
    %>
    <logic:iterate id="element" indexId ="ind" name="dd" scope="session">
    <bean:write name="ind"/>
    <span class="infosort">标题:${element.title }</span>
    <span class="infosort">内容:<bean:write name="element" property="detail"/></span><br>
    </logic:iterate>
    </table>
    </marquee>
    </body>
    </html>其中<%
    AnnouncementDAO dd = new Factory().getAnnouncementDAOInstance();
    List list = dd.queryAllAnnouncement();
    session.setAttribute("dd",list);
    %>
    是表示一个从类里面得到的数据,然后得到List,就是我想在b。jsp中打印的东西。。
    还请高手指点。。
      

  5.   


    居然没看懂...表单无法使用?
    哦 大致了解一点点了你可以这样写个Action named readAnnouncementreadAnnouncement配置input为b.jsp
    将b.jsp中的jsp去掉Action:
    AnnouncementDAO dd = new Factory().getAnnouncementDAOInstance(); 
    List list = dd.queryAllAnnouncement(); 
    request.setAttribute("dd",list); 
    然后你的页面a.jsp中就可以
    <jsp:include page="readAnnouncement.do" flush="true" >这是解决问题的一种办法ps:擅自把lz写的session换成了request,非常不推荐使用session,最好永远别用,除非你的application never distribute
      

  6.   


    这下小功能代码(还只读的)
    没有必要死咬着mvc不放,他已经构成了独立的工作单元,还不影响其他组件lz应该更关心安全性和确切唯一的语义
      

  7.   

    被include的jsp会自动使用include页面所有的request scope object 在黙认情况下。 所以你只需要在那个转向外层的action中把数据夹上,被包含的jsp就可以用了。
      

  8.   

    8,9楼说的也是哦。
    现在关键我是在学习struts!谢谢两位的批评
      

  9.   

    我按照上面说的做了,可是总出现异常,
    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:515)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:408)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    root cause javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot find bean: "dd" in any scope
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:855)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:784)
    org.apache.jsp.announcement_jsp._jspService(announcement_jsp.java:149)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    root cause javax.servlet.jsp.JspException: Cannot find bean: "dd" in any scope
    org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:935)
    org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:232)
    org.apache.jsp.announcement_jsp._jspService(announcement_jsp.java:99)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)我是这么修改的 新建了一个readAnnouncementActionpublic ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
    // TODO Auto-generated method stub

    AnnouncementDAO dd = new Factory().getAnnouncementDAOInstance();
    List list = dd.queryAllAnnouncement();
    request.setAttribute("dd",list);
    return null;
    }映射文件是:
    <action-mappings >
        <action 
         path="/readAnnouncement" 
         type="org.djx.struts.action.readAnnouncementAction" 
         input="announcement.jsp"
         scope="request"
        />  </action-mappings>
    b.jsp中核心内容,也是出错内容..Cannot find bean: "dd" in any scope<logic:iterate id="element" indexId ="ind" name="dd">
    <bean:write name="ind"/>
    <span class="infosort">标题:${element.title }</span>
    <span class="infosort">内容:<bean:write name="element" property="detail"/></span><br>
    </logic:iterate>