Valang이 제공하는 여러 Validation로직이 있지만 사용자가 직접 특정 로직을 구현하여 끼워넣을 수 있습니다.

AbstractFunction 을 상속하여 구현합니다.

제약사항으로 세 개의 인자(Functions[] functions, int line, int column)를 가지는 생성자를 만들어서 AbstractFunction 클레스를 생성할 때 사용할 수 있도록 super를 호출해야 합니다.

Spring MVC 9장에 나와있는 예제로 그다지 쓸만해 보이지는 않지만 입력받은 값의 case를 뒤바꿔서 검증을 하는 예제가 나옵니다.

import org.apache.commons.lang.WordUtils;

import org.springmodules.validation.valang.functions.AbstractFunction;

import org.springmodules.validation.valang.functions.Function;

 

public class AlterCaseFunction extends AbstractFunction {

       public AlterCaseFunction(Function[] functions, int line, int column) {

             super(functions, line, column);

             definedMinNumberOfArguments(1);

             definedMaxNumberOfArguments(1);

       }

 

       protected Object doGetResult(Object target) {

             String value = getArguments()[0].getResult(target).toString();

             return WordUtils.swapCase(value);

       }

}

이렇게 작성한 Function을 ValangValidatorFactoryBean에 등록하여 syntax에서 사용할 수 있습니다.

<bean id="caseSwappingValidator"

       class="org.springmodules.validation.ValangValidatorFactoryBean">

       <property name="syntax">

             <value>

                    <![CDATA[

{ name : alterCase(?) = 'sTEVEN' : 'Name must be Steven' }

]]>

             </value>

       </property>

       <property name="customFunctions">

             <map>

                    <entry key="alterCase"

       value="com.apress.expertspringmvc.validation.AlterCaseFunction" />

             </map>

       </property>

</bean>

흠... 그런데..API에서 ValangValidatorFactoryBean 이녀석이 사라졌습니다. 어디로 갔을런지;;