每个jsp页面中都要显示一些同样的值,常规的做法当然是直接在action中设置一个属性把这些数据传给jsp了,但是这样的话每个action都要写这个属性,相应的getter、setter方法,于是就想到了定义一个拦截器,反正jsp显示的这些数据都是从ValueStack中取的,那么我就自己设置吧,于是就这样做了,但是问题就多多了,比如拦截器的顺序,顺序没弄好值就就被修改了,传不过去了,但是还是解决了,今天又碰到一些问题了,我用的是SiteMesh来进行装饰,妈的,你说怪不怪,SiteMesh所定义的装饰页面可以显示这些值,action所定义的被装饰jsp页面就不能显示,妈的,一样的取值,就是有不同的表现,HttpServletRequest request=(HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
        OgnlValueStack stack=(OgnlValueStack)request.getAttribute("struts.valueStack");
       
String result=invocation.invoke();
 
        /**
         * Set the properties
         */
        List<Category> cityList=systemService.getCategorySortList("city");
        stack.set("cityList",cityList);
        
        EhcacheVindicatorProxy proxy=new EhcacheVindicatorProxy("menu");
        List<FrontMenu> frontMenuList=(List)proxy.get(FrontMenu.class, "frontmenus", "menus.xml");
        stack.set("frontMenuList",frontMenuList);
        
        return result;这是我拦截器中手动给ValueStack设值的代码,妈的,我在jsp页面中<s:debug/>看竟然找不出这些值设在哪了,有的说会在ValueStack栈顶插入一个装有这两个值的Map,妈的,<s:debug/>查看一会有,一会没有,有的时候这两个值还是空的,妈的是空的,SiteMesh定义的装饰页面,竟然取到了,真搞不懂他妈的是怎样取到的,真他妈的想用简单方法做了:
反正是全局的数据,
1、第一次取后全都放到session中,在jsp页面直接在session中取
2、第一次取后全部放到application中,在jsp页面直接在application取
3、每个action中都定义这些属性,每次都取一下,代码管他妈的重复不重复弄了快一个月了,还是没找出全部数据的最好显示方式,真他妈的郁闷!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    关于这个:
    每个action中都定义这些属性,每次都取一下,代码管他妈的重复不重复
    楼主想过没有,定义一个BaseAction,它有那几个属性,然后所有Action都继承它,这样就不会代码重复了。
    全局都要用的参数,是允许放到session中的。
      

  2.   

       1楼回答的很有道理  你可以自己写一个拓展类   然后继承拓展类   如果你的jsp显示的固定信息的话  也可以进行抽取   然后另外一个可以包含  你这样你不用写很多代码了