
Originally Posted by
ctaggart
Let's say I wanted to make sure that ther person's name was set and feetTall was between 1.0 and 8.0. How would I do that simple validation?
Let's see, here is what's currently in rules-context.xml of the tests that I was referring to in my previous post:
Code:
<beans>
<!-- The xml here is *not* the best format to define rules...it's too fine grained and as a result
way to verbose!!! -->
<!-- direct java / groovy / beanshell / jython or some other scripting solution is better
Using the Constraints factory and builders is preferred -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>org.springframework.rules.messages</value>
</list>
</property>
</bean>
<bean id="rulesSource" class="org.springframework.rules.DefaultRulesSource">
<property name="rules">
<list>
<bean class="org.springframework.rules.Rules">
<property name="beanClass">
<value>org.springframework.rules.Person</value>
</property>
<property name="propertyRules">
<map>
<entry key="firstName">
<ref bean="required"/>
</entry>
<entry key="lastName">
<list>
<ref bean="required"/>
<bean class="org.springframework.rules.predicates.StringLengthConstraint">
<constructor-arg index="0">
<value>10</value>
</constructor-arg>
</bean>
<bean class="org.springframework.rules.predicates.UnaryNot">
<constructor-arg index="0">
<bean class="org.springframework.rules.predicates.ParameterizedBinaryPredicate">
<constructor-arg index="0">
<ref bean="equals"/>
</constructor-arg>
<constructor-arg index="1">
<value>Keith</value>
</constructor-arg>
</bean>
</constructor-arg>
</bean>
</list>
</entry>
</map>
</property>
</bean>
</list>
</property>
</bean>
<bean id="equals" class="org.springframework.rules.predicates.EqualTo"/>
<bean id="required" class="org.springframework.rules.predicates.Required"/>
</beans>
My guess you would need to change this to something like:
Code:
<beans>
<!-- The xml here is *not* the best format to define rules...it's too fine grained and as a result
way to verbose!!! -->
<!-- direct java / groovy / beanshell / jython or some other scripting solution is better
Using the Constraints factory and builders is preferred -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>org.springframework.rules.messages</value>
</list>
</property>
</bean>
<bean id="rulesSource" class="org.springframework.rules.DefaultRulesSource">
<property name="rules">
<list>
<bean class="org.springframework.rules.Rules">
<property name="beanClass">
<value>org.springframework.rules.Person</value>
</property>
<property name="propertyRules">
<map>
<entry key="firstName">
<ref bean="required"/>
</entry>
<entry key="feetTall">
<list>
<ref bean="required"/>
<bean class="org.springframework.rules.predicates.Range">
<constructor-arg index="0">
<value>1.0</value>
</constructor-arg>
<constructor-arg index="1">
<value>8.0</value>
</constructor-arg>
</bean>
</list>
</entry>
</map>
</property>
</bean>
</list>
</property>
</bean>
<bean id="required" class="org.springframework.rules.predicates.Required"/>
</beans>
And this is just my guess as I have not tried it, but it seems to make sense
HTH