2012-09-04 4 views
1

여기에 내 유효성 검사 방법이다. 'fieldErrors'에 오류를 추가하지 않습니다.Struts2 유효성 검사가 이상한 행동을하는 것은

{"id":["Invalid field value for field \"id\"."],"topicId":["Invalid field value for field \"topicId\"."]} 

나는 그들이 추가지고 곳에서 아무 생각이 없다 - 나는 두 항목은 다음을 참조하십시오 'fieldErrors'을 디버깅하면 어떻게 일어나고 심지어 내 '검증'방법을 들어가기 전에이다. 여기 내 스트럿츠 conf입니다.

<package name="api" extends="json-default" namespace="/api"> 
    <action name="paper" class="paperApiAction"> 
     <result name="json" type="json"> 
     <param name="root">responseDto</param> 
     </result> 
     <result name="input" type="json"> 
     <param name="root">fieldErrors</param> 
     </result> 
    </action> 
    </package> 

도움이 필요하십니까? 당신이 ID 클래스 변수는 정수 한 TopicID처럼 덕분에

답변

2

"conversionError" interceptor은 유형 변환 오류를 받아 fieldErrors에 넣습니다. 스택에서 꺼내기가 더 쉬운 용도가 있습니다. 나는 이것이 그들 중 하나인지 아닌지 잘 모르겠습니다.

fieldErrors 맵을 복제해야하는 이유는 무엇입니까? 자신의 DTO에서 사용할 맵을 원한다고해도, 기존의 유효성 확인 메커니즘을 사용하지 않는 이유는 무엇입니까? 그 차이는 아주 작고 유연합니다. 그런 다음 외부화 된 비즈니스 논리로 용지 유형 유효성 검사를 작성하고 해당 유형과 작업을 간단하게 테스트 할 수 있습니다.


공백이 없기 때문에 관련이 없지만 읽는 데 어려움이 있습니다. 순진한 리팩토링 :

@Override 
public void validate() { 
    errors = new HashMap<String, String>(); 

    if (StringUtil.isBlank(examCode)) { 
     errors.put("examCode", "Exam code is required"); 
    } 

    if (StringUtil.isBlank(instructions)) { 
     errors.put("instructions", "Paper Instructions are required"); 
    } 

    if (StringUtil.isBlank(strPaperType)) { 
     errors.put("paperType", "Paper Type is required"); 
    } else { 
     validatePaperType(); 
    } 
} 

public void validatePaperType() { 
    paperType = PaperType.getPaperTypeByValue(strPaperType); 
    if (paperType == null) { 
     errors.put("paperType", "A valid Paper Type is required"); 
     return; 
    } 

    if (paperType.equals(PaperType.PRACTICE) && (topicId == null)) { 
     errors.put("topicId", "Topic Id is required"); 
    } 
} 
+0

스택에서 변환 인터셉터를 제거하거나 수정하는 방법은 무엇입니까? 마찬가지로 변환 오류가 발생하면 필드 오류에 추가하는 대신 값이 기본값이되어야합니다. 이 방법은 유효성 검사가 이루어지는 곳을 한 곳만 알고 있습니다. – Shwetanka

+0

@Shwetanka "conversion"인터셉터, "conversionError"인터셉터가 아닙니다. 인터셉터 스택을 수정합니다. –

0

보인다,하지만 당신은 문자열로 설정하려고합니다.

관련 문제