一个星期了,走头无路

10-11-16 tianhandigeng
我用三大框架开发一个系统,系统中有一个页面是装饰页面,也就是说头页面,像javaeye网站中上面那导航菜单页面(导航条菜单以上都是)一样,我不知道它上面的那个导航菜单页面是怎么做的(跟这次问的没关系,如果会的告诉我一下),我自己做的时候用SiteMesh框架,将导航菜单页面做为装饰页面,而且导航菜单页面中添加了数据显示,这些数据需要从数据库中取出来,下面要显示的被装饰页面都是用一个action控制的,sitemesh的原理就是将被装饰页面和装饰页面合起来一起显示,问题就来了,因为上面的页面有数据要显示,所以我的action种也必须包含这样的属性,

private List city

这样的话Value Stack中有值,jsp页面才会显示出来,麻烦的是因为有很多页面需要装饰,所以每个控制被装饰的action都必须有上面那句话才行,这样重复代码太多了

没办法了,弄了一个星期了,对这个问题还是没能弄出来,希望帮帮我,如果觉得我的做法不正确,麻烦教教我另外的方法

1
SpeedVan
2010-11-17 11:43
也就是说装饰页面没有action对应?我去看看

SpeedVan
2010-11-17 11:54
<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配置也需要修改。

tianhandigeng
2010-11-17 15:32
SpeedVan 我在装饰页面中遮掩改了一下

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

上面那个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;
	}
<p>

按理说执行这个action就会执行这个execute()方法,返回SUCCESS对应的页面,但是奇怪的是对于装饰第二个页面也就是input所对应的页面,它没有执行这个方法,而是直接返回input所对应的页面,如果fornt_header没有配input它就会报错

<s:action name="front_header" namespace="/decorators" executeResult="true"/>这个的返回结果怎么会跟被装饰页面有关?

猜你喜欢