如何针对特定错误检查ActionErrors?

时间:2015-04-21 14:42:09

标签: java validation struts struts-1

我正在为我们的应用程序编写自定义ActionErrors消息,以显示特定情况下的特定错误。

public class ErrorForm  extends ActionForm{
public ActionErrors validateForm(ActionMapping mapping, HttpServletRequest request){
errs.add(FORM_KEY_ACTION_TYPE, new ActionMessage(WebGlobals.CUSTOM_ERROR));
return errs;
}
}

不幸的是,我们的代码的结构方式(我宁愿不尝试销售"让我们重新构建四个类进行一次小改动),ErrorForm是其他几个代码的父级类。除了我在代码片段中显示的原因之外,验证必须在ErrorForm类中完成。

当父类终止并将ActionErrors返回给子节点时,子类会添加自己的错误消息,如下所示。

public class ErrorThrowingForm extends ErrorForm {
public ActionErrors postValidate(ActionMapping mapping, HttpServletRequest request)
{
    ActionErrors errs = super.validateForm(mapping, request);

    if (errs.size() > 0)
    errs.add(WebGlobals.GENERAL_ERROR_KEY, new ActionMessage(WebGlobals.PROP_FIELD_ERROR));

return errs;
}
}

尽管从父类返回了错误消息,仅显示子类的错误消息,并且从未看到父错误消息。抛出验证错误的表单字段旁边会显示,但不会显示关联的Custom_Error消息。

我想返回自定义错误消息。我没有能力在child类中添加该错误。

如何确定ActionErrors消息中的错误,以便我可以检查自定义错误并将其返回,而不是依赖于子类?

我已经尝试过简单地删除整个" if"阻止并在validateForm方法收到错误时直接返回错误,但是当我这样做时,错误消息无法显示在页面上,我不知道原因。

1 个答案:

答案 0 :(得分:1)

在您的条款中,父表单应该是ValidatorForm的孩子,您应该更好地理解。在父级的子表单中,您应添加validate方法以调用验证。然后在父实现中,您应该首先在第一个语句中调用framework的super方法,然后您可以将错误消息添加到框架返回的ActionErrors。希望你能理解这一点。

public class ErrorForm  extends ValidatorForm{
public ActionErrors validateForm(ActionMapping mapping, HttpServletRequest request){
ActionErrors errs= super.validate(mapping, request); 
errs.add(ActionErrors.GLOBAL_MESSAGE, new ActionMessage(WebGlobals.CUSTOM_ERROR));
return errs;
}
}