beehive-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Philipp Jardas" <phil...@jardas.de>
Subject Re: Complex Form Bean Validation
Date Fri, 18 Apr 2008 09:37:24 GMT
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 <carlin.rogers@gmail.com> 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
>  <Phillippe.Camus@imail.org> 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: phjardas@gmail.com [mailto:phjardas@gmail.com] 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 <philipp@jardas.de> 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 <zuberali@gmail.com>
>  >  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 <philipp@jardas.de> 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
>  >  >  > >  >
>  >  >  > >
>  >  >  >
>  >  >
>  >
>  >
>

Mime
View raw message