在Struts 1的动作中定义默认方法

时间:2017-07-17 19:51:03

标签: java struts-1

struts 1中有没有办法在动作中定义默认方法?即如果我有一些名为“register”的动作(使用与该方法相关的各种方法),如果传递的方法未知,我可以默认使用certian方法吗?

为了说明,假设我有localhost:8000 / register.do?method = processRegistration,其中processRegistration是寄存器操作中的方法。现在,如果我要导航到一个不存在的方法(即localhost:8000 / register.do?method = foobar),它会向浏览器输出一个stacktrace错误,给出一个“NoSuchMethodException”。我的想法是尝试处理这种情况,即定义一个在触发异常的情况下运行的默认方法。我不确定我的思路是否正确,但任何帮助都会受到赞赏。谢谢!

2 个答案:

答案 0 :(得分:0)

也许您需要创建一个错误页面来隐藏堆栈跟踪?如果是,那与struts无关。例如,在web.xml中定义自定义错误页面。

如果你真的想这样做,我猜猜你有这样的事情:

public class RegisterAction extends DispatchAction {

    public ActionForward processRegistrion(...) {
       ...
    }
}

DispatchAction抛出异常,因此扩展DispatchAction并捕获异常,并发送到默认方法:

public abstract class MyDispatchAction extends DispatchAction {

    public ActionForward execute(...) {
        try {
            return super.execute(...);
        } catch (Exception e) {
            return defaultMethod(...);        
       }

    public abstract ActionForward defaultMethod(...);

}

您的班级现在扩展了' MyDispacthAction and implements defaultMethod`:

public class RegisterAction extends MyDispatchAction {

    public ActionForward processRegistrion(...) {
       ...
    }

    public ActionForward defaultMethod(...) {
       ...
    }

}

但是defaultMethod实际会做什么?

答案 1 :(得分:0)

如果您正在寻找其他解决方案,可以覆盖DispatchAction的未指定方法。

public final class MyAction extends DispatchAction {

    @Override
    public ActionForward unspecified(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
        final HttpServletResponse response) throws Exception {
    }
}

就我而言,我也覆盖了getParameter方法......以便管理参数/方法名称之间的情况(强制小写)。