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 이녀석이 사라졌습니다. 어디로 갔을런지;;