在 Struts 2 应用程序中,我想在所有项目操作之前运行一个逻辑。逻辑将生成字段错误或让操作继续。
我试图为这种情况开发一个拦截器。
但这是我的问题:
在验证器中,我们调用addFieldError(fieldName, object);
设置字段错误,但我不知道如何在拦截器中添加字段错误。
如果这是不可能的,请让我知道我是否可以使用在我所有操作之前运行的验证器(我使用@Validations
,并且我正在寻找一种不在我所有操作之上复制我的验证器的方法!)
在 Struts 2 应用程序中,我想在所有项目操作之前运行一个逻辑。逻辑将生成字段错误或让操作继续。
我试图为这种情况开发一个拦截器。
但这是我的问题:
在验证器中,我们调用addFieldError(fieldName, object);
设置字段错误,但我不知道如何在拦截器中添加字段错误。
如果这是不可能的,请让我知道我是否可以使用在我所有操作之前运行的验证器(我使用@Validations
,并且我正在寻找一种不在我所有操作之上复制我的验证器的方法!)
ValidationAware
您可以通过将操作调用强制转换为拦截器来添加字段(和操作)错误。显然,您的操作必须实际实现ValidationAware
接口,但它可能确实如此(例如,如果您的操作扩展ActionSupport
,那么它也是ValidationAware
因为ActionSupport
implements ValidationAware
):
public String intercept(ActionInvocation invocation) throws Exception {
Object action = invocation.getAction();
if (action instanceof ValidationAware) {
ValidationAware validationAware = (ValidationAware) action;
validationAware.addFieldError("field", "field error");
validationAware.addActionMessage("action message");
validationAware.addActionError("action error");
}
return invocation.invoke();
}
您可以调用addFieldError()
该操作,只需将其转换为ValidationAware
接口:
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext invocationContext = invocation.getInvocationContext();
Object action = invocation.getAction();
if (action instanceof ValidationAware) {
ValidationAware va = (ValidationAware) action;
va.addFieldError("field", "message");
}
....
}