Struts 2 如何 运行 在每个动作之前进行验证
Struts 2 how to run a validation before every action
在 Struts 2 应用程序中,我想在 所有 项目操作之前 运行 一个逻辑。该逻辑将产生一个字段错误或让操作继续。
我试图为这种情况开发一个拦截器。
但这是我的问题:
在验证器中我们调用addFieldError(fieldName, object);
来设置字段错误,但我不知道如何在拦截器中添加字段错误。
如果那不可能,请让我知道我是否可以在所有操作之前使用 运行s 的验证器(我使用 @Validations
,我正在寻找一种方法不在我所有的操作之上复制一个我的验证器!)
您可以通过在拦截器中将操作调用强制转换为 ValidationAware
来添加字段(和操作)错误。
显然你的动作必须实际实现 ValidationAware
接口,但它可能会实现(例如,如果你的动作扩展 ActionSupport
那么它也是 ValidationAware
因为 ActionSupport
实现 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");
}
....
}
在 Struts 2 应用程序中,我想在 所有 项目操作之前 运行 一个逻辑。该逻辑将产生一个字段错误或让操作继续。
我试图为这种情况开发一个拦截器。
但这是我的问题:
在验证器中我们调用addFieldError(fieldName, object);
来设置字段错误,但我不知道如何在拦截器中添加字段错误。
如果那不可能,请让我知道我是否可以在所有操作之前使用 运行s 的验证器(我使用 @Validations
,我正在寻找一种方法不在我所有的操作之上复制一个我的验证器!)
您可以通过在拦截器中将操作调用强制转换为 ValidationAware
来添加字段(和操作)错误。
显然你的动作必须实际实现 ValidationAware
接口,但它可能会实现(例如,如果你的动作扩展 ActionSupport
那么它也是 ValidationAware
因为 ActionSupport
实现 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");
}
....
}