java/jsp/spring/error2013. 3. 4. 08:45

출근하고 갑자기 톰캣을 실행시키는데 에러가 났다.

뭐 에러를 읽어보면 내가 사용하는 아이바티스랑 스프링이랑 버전이 안맞아서 그렇다, DTD를 참조하지 못해서 그렇다는 등..

여러가지 원인이 있겠지만 갑자기 잘 실행되다가 안된다면 서버를 클린시켜주면 끝.

개발을 시작하기전에 서버를 크린시켜주고 시작하는 습관을 가지자 ~

Posted by 유기농농부
java/jsp/spring/note2013. 2. 28. 10:23

http://www.egovframe.org 표준프레임워크 온라인 지원포탈을 보면 Spring Framework + Jakarta Commons Validator 에 대해서 자세하게 설명되어있다.

개요를 살펴보자면

입력값 검증을 위한 Validation 기능은 Valang, Jakarta Commons, Spring 등에서 제공한다.
여기서는 Jakarta Commons Validator를 Spring Framework과 연동하여 사용하는 방법에 대해서 설명하고자 한다.
Jakarta Commons Validator는 필수값, 각종 primitive type(int,long,float…), 최대-최소길이, 이메일, 신용카드번호등의 값 체크등을 할 수 있도록 Template이 제공된다.
이 Template은 Java 뿐 아니라 Javascript로도 제공되어 client-side, server-side의 검증을 함께 할 수 있으며,
Configuration과 에러메시지를 client-side, server-side 별로 따로 하지 않고 한곳에 같이 쓰는 관리상의 장점이 있다.
Struts에서는 Commons Validator를 사용하기 위한 org.apache.struts.validator.ValidatorPlugIn 같은 플러그인 클래스를 제공하는데,
Spring에서는 Spring Modules 프로젝트에서 연계 모듈을 제공한다.
여기서는 server-side, client-side validation을 위해,
설치방법, Spring Module에서 제공하는 핵심 클래스인 DefaultValidatorFactory, DefaultValidator와 설정파일인 validator-rules.xml, validator.xml 에 대한 간략한 설명과
예제 프로젝트인 easycompany에 적용하는 과정을 설명한다.

DefaultValidatorFactory DefaultBeanValidator
프로퍼티 'validationConfigLocationsApache'에 정의된 Validation rule을 기반으로
Commons Validator들의 인스턴스를 얻는다.
DefaultBeanValidator는 org.springframework.validation.Validator를 implements하고 있지만,
DefaultValidatorFactory가 가져온 Commons Validator의 인스턴스를 이용해 validation을 수행한다.
Controller에 validation 수행할때 이 DefaultBeanValidator를 참조하면 된다.

아래 코드를 참조해 빈 정의 파일(예제에는 easycompany-servlet.xml)에 다음과 같이 ValidatorFactory,Validator,validator-rules.xml,validation.xml 파일을 등록한다.

...
<!-- Integration Apache Commons Validator by Spring Modules -->				
    <bean id="beanValidator" class="org.springmodules.validation.commons.DefaultBeanValidator">
	<property name="validatorFactory" ref="validatorFactory"/>
    </bean>
 
    <bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory">
	<property name="validationConfigLocations">
		<list>
                      <!-- validator-rules.xml, validator.xml의 위치-->
			<value>/WEB-INF/conf/validator-rules.xml</value>
			<value>/WEB-INF/conf/validator.xml</value>
		</list>
	</property>
    </bean>
...

validator-rules.xml 설정

validator-rules.xml은 application에서 사용하는 모든 validation rule에 대해 정의하는 파일이다.
예제에 있는 validator-rules.xml의 필수값 체크 부분을 보면 아래와 같이 작성되어 있다.

      <validator name="required"
            classname="org.springmodules.validation.commons.FieldChecks"
               method="validateRequired"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.springframework.validation.Errors"
                  msg="errors.required">
         <javascript><![CDATA[
         .....
            ]]>
         </javascript>
      </validator>
name validation rule(required,mask,integer,email…)
classname validation check를 수행하는 클래스명(org.springmodules.validation.commons.FieldChecks)
method validation check를 수행하는 클래스의 메소드명(validateRequired,validateMask…)
methodParams validation check를 수행하는 클래스의 메소드의 파라미터
msg 에러 메시지 key
javascript client-side validation을 위한 자바스크립트 코드

 

여기까진 지원포탈의 설명이었고, 자 이제부터 시작을 하자.

 

1. Validator

입력값 검증을 위한 Validation 기능은 Valang, Jakarta Commons, Spring 등에서 제공한다.

Spring Modules (0.9 기준)에서 제공하는 validation rule들은 아래와 같다.

1.2  validator_common.xml

 

경로: XXXXXXXX/validation/validator_common.xml

 

validator.xml validation Form을 맵핑 합니다.

form name field property validation할 폼 클래스의 이름, 필드와 각각 매핑 됩니다. 

Server-Side Validation

 

1.3 Controller

 

variable

 

Package: org.springmodules.validation.commons.Default.BeanValidator;

validator_common.xml 등록한 DefaultBeanValidator Controller에서 validation을 수행한다.

 

Function

 

beanValidator.valiadate(object  arg0, errors arg1)  valiadate 수행합니다.

 

validation 에러가 있으면 해당 에러 메시지 리턴 합니다.

 

 


 

1.4 JSP

 

경로:XXXXXXXXXXXX/WEB-INF/jsp/XXXXXXXXXXXXX/Sample/sampleRegister.jsp

 

 Javascript code

    

 

JSP Code

 

Validation을 적용할 JSP를 작성합니다.

form submit을 하면 이름, 나이, 이메일등의 입력값이 Employee 클래스에 바인딩이 되서 Controller에 전달이 되고, Controller validation 수행 로직이 있으면 validator.xml 내용에 따라 validation이 이루어 진다.

만일 에러가 발생하면 <form:error…/>에 에러에 해당하는 메시지를 출력한다.

 

 


 

1.5 에러메시지 등록

 

경로: XXXXXXXXXXXXXXXXXXXX/properties/XXXXX/message/XXXXXXXXXXXX.properties

 

→ 메시지 파일에 에러 메시지를 등록한다.
validation 에러가 발생하면 validator-rules.xml에서 정의했던 msg값으로 에러메시지의 key값을 찾아 해당하는 메시지를 출력해준다.

 

 


 

Client-Side Validation

 

TestPage.jsp 추가

 

1. commons-validator taglib를 선언한다.

 

<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>

 

2. 필요한 자바 스크립트 함수를 generate 하기 위한 코드를 추가 한다. validation-rules.xml에서 선언한 함수를 불러 오기 위해, 위에서 작성한 TestPage.jsp를 아래와 같이 호출한다

 

<script type="text/javascript" src="<c:url value='/common/co/validator/validator.do'/>"></script>

 

3. formName validator_common.xml 정의한 from을 써줍니다.

 

<validator:javascript formName="sampleVO" staticJavascript="false" xhtml="true" cdata="false"/>

 

 

Script code

 

javaScript 함수 호출 시 validate + formname 명을 작성 하면 동적으로 validate가 가능합니다.

 

 

 

 

 

 

 

client-validation을 위해 바로 submit하지 않고 먼저 validateRequired함수를 호출합니다.

 

 

 

 

 

'java/jsp/spring > note' 카테고리의 다른 글

비교연산자 'equals' 와 '=='  (0) 2013.08.07
Posted by 유기농농부
java/jsp/spring/error2013. 2. 26. 13:19

java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature!  

 

위의 에러는 Validate를 하는 메소드 내에서 BindingResult의 순서와 관련된 에러인듯 하다.

 

BindingResult가 HttpServletRequest, HttpServletResponse, ModelMap 등~ 보다 먼저 선언되어야

에러가 나지 안았다!!!

 public String updateSwList(            

            @ModelAttribute("swInfoVO") ST_Sw_VO swInfoVO,
            BindingResult bindingResult,
            Model model,
            SessionStatus status)
            throws Exception{


이와같이 BindingResult를 꼭 앞에 쓰는 습관을 길러야겠다...



물론 원인은 알지 못한다...........


'java/jsp/spring > error' 카테고리의 다른 글

Context initialization failed  (2) 2013.03.04
Posted by 유기농농부