2011-11-10 3 views
1

서버 측에서 Struts2를 사용하는 프로젝트가 있는데 jpGrid (JSON 형식 사용)와 함께 작동 시키려고합니다. jqGrid로 만든 여러 테이블이 있고 navGrid에서 추가/편집/삭제 단추를 사용하고 있습니다.struts jqgrid 서버 유효성 검사 오류 메시지

내가 가진 주요 문제는 서버 유효성 검사 오류 메시지입니다. 나는 사용자 정의 유효성 검사기를 만들었고 jsp 페이지를 사용하여 s : fielderror를 사용하지만 jqGrid에서 팝업을 추가/편집 할 수있는 방법을 모르겠습니다. 나는 jqGrid가 사용자에게 클라이언트에 대한 사용자 정의 유효성 검사를 제공한다는 것을 알고 있지만 이것에는 한계가 있습니다 (사용자의 전자 메일이 고유한지 여부를 테스트하는 것에 대해 생각해보십시오. 확실히 데이터베이스를 사용해야하거나 일부 필드가 서로 의존하고 isManager가 true 인 경우와 같이 함께 테스트해야하며 managerCode가 비어 있지 않아야하며 반대의 경우도 마찬가지입니다.

클라이언트 유효성 검사를 사용할 때 오류가 발생할 때마다 추가/편집 창에 메시지가 표시됩니다. 어떻게 든 서버 유효성 검사 오류 메시지를 같은 방식으로 창에 표시 할 수 있습니까?

답변

3

나는이 문제를 해결할 수있었습니다. 나이 필드에 대해 간단한 사용자 정의 유효성 검사기를 사용하는 방법을 설명합니다.이 유효성 검사기는 Employee에 대해 18보다 커야합니다. Validator가 이미 validator.xml에 선언되어 액션에 매핑되어 있고 ValidationException의 경우 메시지가 "Employee must be than 18"이라고 가정합니다.

방화범을 사용하여 양식의 오류 영역 ID가 FormError라는 것을 알아 냈습니다. jqgrid에서 콜백 함수 errorTextFormat을 구성하여 서버에서 응답을 받고 처리 할 수 ​​있습니다. 있는 jqGrid 구성에서, 하나는

var errorFormat = function(response) { 
    var text = response.responseText; 
    $('#FormError').text(text); //sets the text in the error area to the validation //message from the server 
    return text; 
}; 

문제는 서버가 암시 적으로 전체 예외 스택 추적을 포함하는 응답을 보낼 것 지금과

errorTextFormat : errorFormat, 

을 작성할 수 있습니다. 이를 처리하기 위해 새로운 결과 유형을 만들기로 결정했습니다.

<package name="default" abstract="true" extends="struts-default"> 

... 

<result-types> 
      <result-type name="validationError" 
       class="exercises.ex5.result.MyResult"> 
      </result-type> 
</result-types> 
... 
<action name="myaction"> 
... 
<result name="validationException" type="validationError"></result> 
<exception-mapping result="validationException" 
       exception="java.lang.Exception"></exception-mapping> 
</action> 
... 
</package> 

이 내가 추가/편집 창에서 유효성 검사 오류 메시지를 얻기 위해 다음 단계는 지금은 작동 다음과 같이

public class MyResult implements Result { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -6814596446076941639L; 
    private int errorCode = 500; 


    public void execute(ActionInvocation invocation) throws Exception { 
     ActionContext actionContext = invocation.getInvocationContext(); 
     HttpServletResponse response = (HttpServletResponse) actionContext 
      .get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"); 

     Exception exception = (Exception) actionContext 
       .getValueStack().findValue("exception"); 

     response.setStatus(getErrorCode()); 
     try { 
      PrintWriter out = response.getWriter(); 
      out.print(exception.getMessage()); 

     } catch (IOException e) { 
      throw e; 
     } 
    } 

    /** 
    * @return the errorCode 
    */ 
    public int getErrorCode() { 
     return errorCode; 
    } 

    /** 
    * @param errorCode the errorCode to set 
    */ 
    public void setErrorCode(int errorCode) { 
     this.errorCode = errorCode; 
    } 

} 

은 또한 struts.xml에서 구성해야합니다.

관련 문제