Hi Carlin,
thanks a lot for the tip about the validator interface, this is
exactly what I was looking for.
Not a new problem arised, maybe hopefully you can help me out with
this as well. I am using page flow controller inheritance.
public class ParentController extends ... {
@Jpf.Action( ... validationErrorForward = Jpf.NavigateTo.currentPage )
public Forward submit(FormBean form) { ... }
}
The child flow controller has inheritLocalPaths set to true and does
not overwrite the action method.
When I submit the form bean, which has been enhanced with the
Validator interface, and the validation fails, I would expect the user
to be forwarded back to the input page. However, I receive an
exception:
org.apache.beehive.netui.pageflow.NoPreviousPageException: No relevant
page for return-to="currentPage"
If I use a path in the validationErrorForward instead of NavigateTo,
no exception occurs but no JSP is being rendered. =(
Do you have any ideas?
Thanks a lot,
<P>
On Fri, Apr 18, 2008 at 7:52 AM, Carlin Rogers <[EMAIL PROTECTED]> wrote:
> If you cannot come up with a the custom validator that works for you,
> you can implement a validate() method as you inquired about in your
> original post. Just make the super class form bean implement the
> org.apache.beehive.netui.pageflow.Validatable interface and write a
> general validate() method.
>
>
> http://beehive.apache.org/docs/1.0.2/netui/apidocs/javadoc/org/apache/beehive/netui/pageflow/Validatable.html
>
> The Validatable interface validate() method would be called when data
> is posted to any page flow action that takes the given bean as its
> argument (Note, the action needs validation turned on by including the
> validationErrorForward in the @Jpf.Action annotation).
>
> Or, if you extend your super class form bean from Struts ActionForm,
> you could override its validate() method and it would be called by the
> framework.
>
> Kind regards,
> Carlin
>
>
>
> On Thu, Apr 17, 2008 at 6:21 AM, Phillippe Camus
> <[EMAIL PROTECTED]> wrote:
> >
> > Hi Philipp,
> >
> > Not sure if that is what you are looking for, but you can create custom
> > validators.
> >
> > You need to reference them in a deployment descriptor named
> > "custom-validator-rules.xml":
> >
> > <form-validation>
> > <global>
> > <validator name="validateNameIsString"
> > classname="org.foo.portal.utils.customValidator.CustomRules"
> > method="validateNameIsString"
> > msg="nameIsStringError"
> > methodParams="java.lang.Object,
> > org.apache.commons.validator.ValidatorAction,
> > org.apache.commons.validator.Field,
> > org.apache.struts.action.ActionMessages,
> > javax.servlet.http.HttpServletRequest,
> > javax.servlet.ServletContext" >
> > </validator>
> > </global>
> > </form-validation>
> >
> > Then in your CustomRules class you would implement your validation
> > method:
> >
> > public static boolean validateNameIsString(Object bean, ValidatorAction
> > va, Field field,
> > ActionMessages errors, HttpServletRequest
> > request,
> > ServletContext servletContext)
> > {
> >
> > You can access the fieds in your FormBeans like this:
> > ValidatorUtil.getValueAsString(bean, field.getProperty());
> >
> > And then submit the error for the Netui tags: errors.add(field.getKey(),
> > Resources.getActionError(request, va, field));
> >
> > Then in your form bean:
> >
> > @Jpf.ValidatableProperty(validateCustomRules = {
> > @Jpf.ValidateCustomRule(rule = "validateNameIsString", messageKey =
> > "nameIsStringError") })
> > public String getFirstName() {
> > return firstName;
> > }
> >
> > You can pretty much do whatever you want in the CustomRules class. Hope
> > this helps.
> >
> > Best regards,
> >
> > Phil
> >
> >
> >
> > -----Original Message-----
> > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of
> > Philipp Jardas
> > Sent: Thursday, April 17, 2008 6:01 AM
> > To: Beehive Users
> > Subject: Re: Complex Form Bean Validation
> >
> > Hi Zuber,
> >
> > Thanks again for the swift response. However, I am not able to find the
> > base class "TaggedObject" you mentioned, neither in the Beehive nor in
> > the Struts libraries. Are you sure about the name?
> >
> > Thanks,
> > <P>
> >
> > > I am not sure if this is correct way to do but you can do that by
> > > creating a bean class by extending 'TaggedObject' class it has
> > > validate method which you can override .
> > >
> > >
> > >
> > > Hope this will help you.
> > >
> > > Regards,
> > > Zuber
> > >
> > >
> > > On 4/17/08, Philipp Jardas <[EMAIL PROTECTED]> wrote:
> > > >
> > > > Hi Zuber,
> > > >
> > > > thanks for your reply, though it didn't catch what I was thinking
> > of.
> > > > I am, of course, aware of the property annotations. Let me give an
> >
> > > > example of what I want to do:
> > > >
> > > > public class TestForm {
> > > > public long getA() { ... }
> > > > public long getB() { ... }
> > > >
> > > > public void validate() {
> > > > if (getA() > 3 && getB() < 4) {
> > > > // Add error message to B: "Must be smaller than 4 if A is
> > > > greater than 3".
> > > > }
> > > >
> > > > // even more complex validation scenarios...
> > > > }
> > > > }
> > > >
> > > > How could I possibly do this with annotations that always refer to
> > > a > single property?
> > > >
> > > > Thanks,
> > > > <P>
> > > >
> > > > On Thu, Apr 17, 2008 at 11:32 AM, zubair syed <[EMAIL PROTECTED]>
> > wrote:
> > > > > Hi Philip ,
> > > > >
> > > > > You can do this my putting validateProperty anotation of every
> > > getter > of the > > property.
> > > > >
> > > > > for ex:
> > > > >
> > > > > @Jpf.ValidatableProperty(validateMaxLength =
> > > > @Jpf.ValidateMaxLength(chars =
> > > > > 20, messageKey = "error message you can set"), validateMinLength
> >
> > > = > > @Jpf.ValidateMinLength(messageKey = "errror message you can
> > > set ", > chars = > > 5)) > > public String getUser_id(){ > >
> > > return user_id; > > } > > > > You can also get help from beehive
> >
> > > documentation . Hope this will help > you.
> > > > >
> > > > > Regards,
> > > > > Zuber
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > On 4/17/08, Philipp Jardas <[EMAIL PROTECTED]> wrote:
> > > > > >
> > > > > > Hi everyone,
> > > > > >
> > > > > > I hope you might be able to help me with this issue. I want a
> > > form > > > bean to perform more complex validation than what is
> > > possible with > the > > > property annotations. Think "if property
> > > A has the value X then > > > property B must not be greater than Y".
> > > > > >
> > > > > > In Struts I would simply override the validate method. How do
> > > I do > > > this in Beehive?
> > > > > >
> > > > > > Thanks for your help,
> > > > > > Philipp
> > > > > >
> > > > >
> > > >
> > >
> >
> >
>