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