说是弱智,是针对我的程序来说的。
如上一篇所述我的项目结构,我在基础类CrudAction中,定义了nopemission,但一开始我不是那样写的,我的写法是:
@Results({@Result(name = "nopermission", location = "/nopermission.jsp") })
public abstract class CrudAction<T, TService extends ICrudService<T>> extends
CrudActionSupport<T> {
public static final String NOPERMISSION = "nopermission";
public String execute() throws Exception {
if (moduleid == null) {
return NOPERMISSION;
} else {
module = moduleService.getOne(moduleid);
if (!SecurityUtils.getSubject().isPermitted(module.getCmdkey())) {
return NOPERMISSION;
}
}
return list();
}
……
}
对,我没有定位到根目录下的nopermission.action,而是定位到了/nopermission.jsp。
而亦如代码所示,我的所有继承于该类的action默认执行的方法就是上面这个excute,而这个函数中,检测了用户是否拥有执行的权限。
然后我的问题就出现了。我新建了个模块,但却忘记给用户设置权限了,于是,梦魇一般的页面无法找到啊。
它找不到的是/permission.jsp,而不是我想要的页面啊,可是我不知道啊,我就知道页面无法找到啊。
后来才想起来去跟踪,而一开始我不去跟踪是因为我感觉找不到页面说明执行不到action啊,好在我想起来了什么,当我去设置断点的时候,我便发现了问题。
是的,我没有跟踪执行就解决了问题。
像我的那种目录结构,所有jsp放在/webapp/WEB-INF/content中,我真的不知道如何准确定位到一个jsp啊,所以还是用action才行啊。
最后,我改成下面的了:
@Results({@Result(name = "nopermission", location = "/nopermission.action", type = "redirect") })
public abstract class CrudAction<T, TService extends ICrudService<T>> extends
CrudActionSupport<T> {
public static final String NOPERMISSION = "nopermission";
public String execute() throws Exception {
if (moduleid == null) {
return NOPERMISSION;
} else {
module = moduleService.getOne(moduleid);
if (!SecurityUtils.getSubject().isPermitted(module.getCmdkey())) {
return NOPERMISSION;
}
}
return list();
}
……
}
但是我没测试,因为我同时把用户的权限加上了。