2013-09-04 2 views
-1

Struts2에서 validate 메서드는 execute 메서드보다 먼저 호출됩니다. 그러나 validate 방법에서 필드 값을 변경할 수없는 이유는 무엇입니까?Struts2에서 유효성 검사 메소드에서 아무 것도 바꿀 수없는 이유는 무엇입니까?

+1

아무리 좋은 접근 방법이 아니더라도 유효성 검사 섹션에서 변경하려는 이유가 있습니다. –

+0

@Umesh Awasthi 유효성 검사를하는 동안 일부 null 값을 제거해야합니다. 내 경우에는 목록이 인데, 두 개의 vales 1과 2를 비교하고 validate 메소드에 하나의 값을 더 추가합니다. 목록에 55를 추가하고이 값을 결과 형식 입력 페이지에 표시합니다. [1,2] [1,2] 55]. 그래서 내가 왜 혼란 스럽 냐고. –

+1

validate() 메소드를 사용하면 안됩니다 (코드는 응집력이 있어야합니다). 여러 Action Class/View 페이지에 대해 동일한 작업을 수행해야하는 경우 aspect와 같은 교차 절단 문제를 별도의 사용자 정의 인터셉터에 보관하고 Action 클래스 앞에이 인터셉터를 호출하도록 구성하십시오. 아직도 저는 인터셉터를 사용하는 것이 좋은 해결책이 아니라고 생각합니다. 여기서 뭔가를 더 잘 찾을 수 있기를 바랍니다. –

답변

4

어떤 특정 방법도 한 가지해야합니다. validate() 메서드 데이터의 유효성을 검사해야합니다 - 올바른지 확인하고 수정하지 말아야합니다. 유효성 검사의 결과는 간단히 합격 또는 불합격이어야합니다. 그것이 다른 일을한다면, 너무 많이하고 있습니다.

(이 전혀 스트럿츠 특정하지 않습니다 -. 그것은 검증의 일반적인 의미의, IMO)

+0

기술 답변을 찾고 있는데 ... 답변을 주셔서 감사합니다. @Jon Skeet –

+1

@prtk_shah : 요점은 Struts (순수성 검증을 강요하는 것)가 자연 원칙을 따르고 있다는 것입니다. –

3

난 강력 @ 존 소총으로하는 유효성 검증() 메소드에 동의만을 검증을하기위한 것입니다.

하지만 난 당신의 validate() ActionSupport를 클래스의 방법을 사용하는 경우, 다음과 같은 예를 사용하여 validate 메소드의 필드 값을 변경할 수 있습니다 추가 할 prtk_shah의 질문 @ 대답 : 기본적으로

public class LoginAction extends ActionSupport{ 
private String userName; 
private String password; 
//getter setter 
@Override 
    public void validate() { 
     super.validate(); 
     if(getUserName()==null){ 
      setUserName("abc"); 
     } 

    } 
} 

을 validate() 메서드는 "input"문자열을 반환하지만 결과가 struts.xml의 "input"에 매핑되면 다음 코드를 사용하여 welcome.jsp에서 필드 값을 가져올 수 있습니다.

<s:property value="userName"/> 

참고 : 위 예제는 질문에서 얻은 것을 얻기 위해 사용할 수 있지만 validate() 메서드는 유효성 검사 목적으로 만 사용됩니다.

+0

둘 다 사실입니다. 하지만 내 경우에는 목록이 인데 두 개의 vales 1과 2가 있고 유효성 검사 메서드에 하나의 값이 더 추가됩니다. 목록에 55를 추가하고이 값을 결과 형식 입력 페이지에 표시합니다. 점점 [1,2]가 아니라 [1,2,55]. 그래서 내가 왜 혼란스러워하는지 .. –

+1

코드를 입력하여 여기에서 테스트 할 수 있습니까? –

+0

여기에서 볼 수 있습니다 .http : //stackoverflow.com/questions/18606284/struts2-repopulating-textboxes-with-listinteger-after-validation –