一个星期了,走头无路

我用三大框架开发一个系统,系统中有一个页面是装饰页面,也就是说头页面,像javaeye网站中上面那导航菜单页面(导航条菜单以上都是)一样,我不知道它上面的那个导航菜单页面是怎么做的(跟这次问的没关系,如果会的告诉我一下),我自己做的时候用SiteMesh框架,将导航菜单页面做为装饰页面,而且导航菜单页面中添加了数据显示,这些数据需要从数据库中取出来,下面要显示的被装饰页面都是用一个action控制的,sitemesh的原理就是将被装饰页面和装饰页面合起来一起显示,问题就来了,因为上面的页面有数据要显示,所以我的action种也必须包含这样的属性,
private List city
这样的话Value Stack中有值,jsp页面才会显示出来,麻烦的是因为有很多页面需要装饰,所以每个控制被装饰的action都必须有上面那句话才行,这样重复代码太多了
没办法了,弄了一个星期了,对这个问题还是没能弄出来,希望帮帮我,如果觉得我的做法不正确,麻烦教教我另外的方法

也就是说装饰页面没有action对应?我去看看

<decorator name="main" page=“DecoratorMainPage.jsp">
这里是否可以用action呢?

1 :它通过过滤器(filter)来拦截页面访问

2 :根据被访问页面的URL找到合适的装饰模板

3 :提取被访问页面的内容,放到装饰模板中合适的位置

4 :最终将装饰后的页面发送给客户端。

从1、2我们可以知道是用filter拦截URL,那么filter是否可以定制呢?

实在不行的话,可以通过增加一个action来实现,也就是action->页面,变成action->新增action->页面。新增action就是获取你装饰页面所需信息的。这样做的话,注意地址永远是同一个了,也就是新增action的访问地址,则原来的filter配置也需要修改。

SpeedVan 我在装饰页面中遮掩改了一下


<s:action name="front_header" namespace="/decorators" executeResult="true"/>
<decorator:body/>
<%@ include file=
"footer.jsp" %>

上面那个action控制显示jsp页面,这样装饰页面就有action对应了,不过问题好像又出来了

现在我页面中有两个菜单,都通过action来控制显示jsp页面,第一个点击以后,return success显示出来,第二个页面通过校验验证后return input显示出来,也就是说第二个是input所对应的页面
经过装饰后却有这样的情况,后面一个装饰的时候,<s:action name="front_header" namespace="/decorators" executeResult="true"/>没有执行action中的execute方法,也就是返回了input所对应的页面
这就奇怪了,我front_header中是这样写的


public String execute() {
this.setCityList(systemService.getCategorySortList("city"));
return SUCCESS;
}

按理说执行这个action就会执行这个execute()方法,返回SUCCESS对应的页面,但是奇怪的是对于装饰第二个页面也就是input所对应的页面,它没有执行这个方法,而是直接返回input所对应的页面,如果fornt_header没有配input它就会报错
<s:action name="front_header" namespace="/decorators" executeResult="true"/>这个的返回结果怎么会跟被装饰页面有关?