1

В приложении Struts 2 я хочу запустить логику до всего действия проекта. Логика генерирует ошибку поля или позволяет продолжить действие.Struts 2 как выполнить проверку перед каждым действием

Я попытался разработать перехватчик для этого случая.

Но вот моя проблема:

В валидатора мы называем addFieldError(fieldName, object); установить ошибку поля, но я не знаю, как я могу добавить ошибки поля в перехватчика.


Если это не возможно, пожалуйста, дайте мне знать, если я могу использовать валидатор, который проходит перед всеми моими действиями (я использую @Validations, и я ищу способ, чтобы не копировать мой валидатор на вершине все мои действия!)

+0

Проверка выполняется всегда * перед любым действием. Иногда вам не нужны такие проверки, или проверки не выполняются в транзакции, поэтому переход на более высокий уровень означает слой * presentation *. –

ответ

3

Вы можете добавить ошибки поля (и действия), выполнив вызов вашего действия в ValidationAware в вашем перехватчике. Очевидно, ваше действие должно фактически реализовать интерфейс ValidationAware, но probaly делает (например, если ваше действие распространяется 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(); 
} 
1

Вы можете вызвать 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"); 
    } 

    .... 
}