BaseAction.java
public class BaseAction extends ActionSupport implements RequestAware,SessionAware{
    protected Map session;
    protected Map request;    //getter settter没有复制 为节省空间 代码没有问题
   @Override
    public String execute() throws Exception { 
    
     Object o = session.get("login");
     if(o != null) {
     return super.execute();
     }
     throw new RuntimeException("please logon");
    }
}AdminAction.java
public class AdminAction extends BaseAction {
         private String boss;

private AdminManager adminManager;

private Admin admin;

public String login() {

Admin a = adminManager.login(admin.getUserName(), admin.getPassword());
if(a != null) {
session.put("login", a);
return "success";
}
return "login";

}
}这些是代码,在调用http://localhost:8080/admin!login时,我认为应该先执行BaseAction中的execute方法,然后执行AdminAction中的login方法,完成的功能是登录的验证
但是实际上父类(BaseAction)中的execute方法没有被调用(用debug工具下了断点知道的),直接调用了AdminAction的login方法,高手们 告诉下。小妹不胜感激。如果有其他的验证方法也可以告诉下 我还有30分,解决了一并送上。

解决方案 »

  1.   

    在AdminAction里面写一个方法validateLogin(){
    //这里进行验证
    }
      

  2.   

    你使用的是动态方法调用,所以父类的execute方法肯定不会调用,那个方法是默认执行方法,动态方法调用就走不到了那里了
      

  3.   

    如果是静态的
    <action name="actionOne" class="com.action.ActionOne" method="add"></action>
    http://localhost:8080/actionOne.action 这样这样调用的话 actionOne父类的execute方法会执行吗? 我试过 好像也是不行的
      

  4.   


    <action name="actionOne" class="com.action.ActionOne" method="add">
    你method配置了add还是动态方法调用- -你这样弄父类还是不会执行~~~如果想做权限验证还是用拦截器比较好。
      

  5.   

    你可以在login()方法中调用super.execute()