1

Struts 2 응용 프로그램에서 모든 프로젝트 작업 전에 논리를 실행하고 싶습니다. 논리는 필드 오류를 생성하거나 조치를 계속합니다.Struts 2 모든 작업 전에 유효성 검사를 실행하는 방법

이 경우에 대한 인터셉터를 개발하려고했습니다. 우리는 필드 오류를 설정하는 addFieldError(fieldName, object); 전화,하지만 난 인터셉터에서 필드 오류를 추가 할 수있는 방법을 모르는 발리에서

:

그러나 여기 내 문제입니다. 가능하지 않은 경우


, 내 모든 행동 (나는 @Validations를 사용하고 난의 상단에 내 유효성 검사기를 복사하지 않는 방법을 찾고 있어요 전에 실행되는 유효성 검사기를 사용할 수 있는지 알려 주시기 바랍니다 내 모든 행동!)

+0

유효성 검사는 모든 작업 전에 * 항상 * 실행됩니다. 때로는 그러한 유효성 검사가 필요 없거나 유효성 검사가 트랜잭션에서 수행되지 않으므로 상위 계층으로 이동하면 * 프레젠테이션 * 계층을 의미합니다. –

답변

3

액션 호출을 인터셉터의 ValidationAware으로 전송하여 필드 (및 액션) 오류를 추가 할 수 있습니다. 는 분명히 당신의 행동은 실제로 ValidationAware 인터페이스를 구현해야하지만, probaly 않습니다 (예를 들어, 액션은 ActionSupport 다음 그것은 또한 ValidationAwareActionSupport 때문에 구현 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"); 
    } 

    .... 
}