struts 1中有没有办法在动作中定义默认方法?即如果我有一些名为“register”的动作(使用与该方法相关的各种方法),如果传递的方法未知,我可以默认使用certian方法吗?
为了说明,假设我有localhost:8000 / register.do?method = processRegistration,其中processRegistration是寄存器操作中的方法。现在,如果我要导航到一个不存在的方法(即localhost:8000 / register.do?method = foobar),它会向浏览器输出一个stacktrace错误,给出一个“NoSuchMethodException”。我的想法是尝试处理这种情况,即定义一个在触发异常的情况下运行的默认方法。我不确定我的思路是否正确,但任何帮助都会受到赞赏。谢谢!
答案 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方法......以便管理参数/方法名称之间的情况(强制小写)。