为了更有效率的去限制访问,我们可以用onActivate方法,这个方法在前面说use the page activation contex传值的时候说到过。这个方法在每次页面加载的时候都会被调用一次。如果在activation context中有值,那么可以通过参数的方式传到这个方法。任何访问这个页面的用户都将被验证。
还记得在前面关于成功验证的例子吗(这个我没说,等下稍微说下),我们将USER作为一个ASO保存了起来,所以我们不管用户有没有验证通过,在他访问这个页面时我们只要去看这个USER作为ASO是不是存在。在showall.java中加入如下代码
@ApplicationState
private User user;
private boolean userExists;
Object onActivate()
{
if (!userExists) return Start.class;
return null;
}
(在这里是这个意思,如果一个对象被当作ASO,那么要判断这个对象是否在session中存在,只要在类中加入这个对象的属性名+Exists的一个布尔值属性,那么通过这个boolean属性就能判断session中是否有这个ASO了,在上面这个例子中,如果验证成功则在session中是有USER对性存在的,如果没有验证成功则没有,这里就是根据这个判断的);
onActivate()方法在这里就象个普通的事件处理一样去工作,但是它不是由用户提交的事件触发,而是由页面的加载的生命周期来触发的。如果返回值不为空,则它的返回值则被当成事件处理的返回值类型返回。
(注:事件处理有几种返回类型:
1:nothing :返回值为void时
2:string:也就是页面的逻辑名,如前面的another ,secure/page
3:class:这是最好的一种方式,比如Another.class。用String以后逻辑名可能会变,但是类名比较稳定。
4:page:象在最前面那样,用@injectpage注入后返回的
5:LINK:
6:Stream:一个流,更具体的说StreamResponse对象,我们可以以二进制的方式输出PDF或者EXCEL文档。)
如果返回值是null,那么就以为着当前的页面将会被显示。
现在showall页面算是正常了,但是却没有任何的内容显示。接着来吧,还有更多的组件呢。