比如csdn上的csdn首页,资讯,论坛,在每个页面上都有。不会在每个action中写上方法然后跳转的吧,那样好多重复性的代码,有没有解决的方法啊?

解决方案 »

  1.   

    你这个问题本质上是页面的模板问题。
    页面是分块,用模板来动态生成页面,公用的导航链接可以一起放在模板里,或者一个独立的模块里。
    可以看看freeer,tiles之类的框架
      

  2.   

    嗯,谢谢。但是我们的一级二级菜单都是放在一个页面读取出来的,然后用  <jsp:include page="navigation.jsp"></jsp:include>  调用能实现。这个页面有诗歌跳转页面
      <img src="${list.image }" />
                </div>
    <div class="fs_products_nva">
          <ul>
                         <li><a href="show_ptpro.do?id=${list.id }">专利产品</a></li>
                            <li><a href="show_introduction.do?id=${list.secondtype.id }">专利介绍</a></li>
                            <li><a href="show_Certificate.do?id=${list.secondtype.id  }">专利证书</a></li>
                            <li><a href="show_media.do?id=${list.secondtype.id }">媒体关注</a></li>
                        </ul>
                </div> 
               </c:forEach> 
                </div>
    每个页面都是这样的,都是根据ID跳的,都是根据LIST这个方法跳的
      

  3.   

    百度下sitemesh 吧
    struts2 其实可以分为 准备 组装 执行 的
    其中的组装就是可以把你的页头页尾等公用的页面 可以嵌入 组装好新页面 再显示的。
     大概是这样配置、 具体怎么配置你还是百度google吧
    web.xml  <!--加载struts2前端处理器.filter顺序固定 -->
        <filter>
            <filter-name>struts-prepare</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
        </filter>
        <filter>
            <filter-name>struts-execute</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
        </filter>
        <filter>
            <filter-name>sitemesh</filter-name>
            <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
        </filter>
        <!--sitemesh in the middle and after struts-prepare -->
        <filter-mapping>
            <filter-name>struts-prepare</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>sitemesh</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>struts-execute</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    stemesh.xml<?xml version="1.0" encoding="UTF-8"?>
    <sitemesh>
        <property name="decorators-file" value="/WEB-INF/decorators.xml"/>
        <excludes file="${decorators-file}"/>
        <page-parsers>
            <parser default="true"
                    class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
            <parser content-type="text/html"
                    class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
            <parser content-type="text/html;charset=UTF-8"
                    class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
        </page-parsers>    <decorator-mappers>
            <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
                <param name="config" value="${decorators-file}"/>
            </mapper>
        </decorator-mappers>
    </sitemesh>decorators.xml
    <decorator name="sundries" page="/view/layout/frontpage/sundries/html/main.jsp">
            <pattern>*/view/sundries/feedback/*.action**</pattern>
        </decorator>
      

  4.   

    意思是: 只要匹配了某个定义的路径(*/view/sundries/feedback/*.action**)、 装饰器就进行装饰、
    装饰的东西在page="/view/layout/frontpage/sundries/html/main.jsp" 里
    可以装饰你想装饰的地方、可以是页头、页尾、导航、...等等你想重用的、
    装饰完事才在跳到你struts.xml指定的jsp页面
      

  5.   


    谢谢,这个我会去学习的。其实还有个简单的方法就是在action中实现ApplicationAware