Package org.jboss.seam.example.wicket

Source Code of org.jboss.seam.example.wicket.FormInputBorder

package org.jboss.seam.example.wicket;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.feedback.ContainerFeedbackMessageFilter;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.border.Border;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.jboss.seam.wicket.ModelValidator;
import org.jboss.seam.wicket.SeamPropertyModel;

/**
* Wicket allows you to build powerful custom components easily.
*
* Here we've built generic border you can use to decorate a form input with
* a label, a * if the field is required and an feedback panel for displaying
* any error messages.
*
* It also attaches a model validator (which asks Seam to validate the input against
* Hibernate Validator).
* based
*
* @author Pete Muir
*
*/
public class FormInputBorder extends Border
{

   private FeedbackPanel feedbackPanel;
   private boolean ajaxValidate;
   private Model labelModel;
  
   /**
    * Create a new form input border which validates using ajax
    * @param id Id of border component on page
    * @param label Label to add
    * @param component The component to wrap
    * @param model The model to attach the component to
    */
   public FormInputBorder(String id, String label, FormComponent component, PropertyModel model, boolean ajaxValidate)
   {
      this(id, label, component, model, ajaxValidate, model.getTarget().getClass(), model.getPropertyExpression());
   }
  
   public FormInputBorder(String id, String label, FormComponent component, SeamPropertyModel model, boolean ajaxValidate)
   {
      this(id, label, component, model, ajaxValidate, model.getTarget().getClass(), model.getPropertyExpression());
   }
  
   public FormInputBorder(String id, String label, FormComponent component, PropertyModel model)
   {
      this(id, label, component, model, true, model.getTarget().getClass(), model.getPropertyExpression());
   }
  
   public FormInputBorder(String id, String label, FormComponent component, SeamPropertyModel model)
   {
      this(id, label, component, model, true, model.getTarget().getClass(), model.getPropertyExpression());
   }
  
   /**
    * Create a new form input border which validates
    * @param id Id of border component on page
    * @param label Label to add
    * @param component The component to wrap
    * @param model The model to attach the component to
    * @param ajaxValidate Whether to use ajax validation
    */
   public FormInputBorder(String id, String label, FormComponent component, IModel model, boolean ajaxValidate, Class modelClass, String propertyExpression)
   {
      super(id);
      this.ajaxValidate = ajaxValidate;
      labelModel = new Model(label);
      component.setLabel(labelModel);
      if (component.isRequired())
      {
         label += ":*";
      }
      else
      {
         label += ":";
      }
      Label labelComponent = new Label("label", label);
      add(labelComponent);
      feedbackPanel = new FeedbackPanel("message", new ContainerFeedbackMessageFilter(this));
      add(component, model, modelClass, propertyExpression);
      add(feedbackPanel);
   }
  
   public FormInputBorder add(FormComponent component, PropertyModel model)
   {
      return add(component, model, model.getTarget().getClass(), model.getPropertyExpression());
   }
  
   public FormInputBorder add(FormComponent component, IModel model, Class modelClass, String expression)
   {
      component.add(new ModelValidator(modelClass, expression));
      component.setModel(model);
      component.setLabel(labelModel);
      add(component);
      if (ajaxValidate)
      {
         feedbackPanel.setOutputMarkupId(true);
         component.add(new AjaxFormComponentUpdatingBehavior("onblur")
         {
  
            @Override
            protected void onUpdate(AjaxRequestTarget target)
            {
               getFormComponent().validate();
               target.addComponent(feedbackPanel);
            }
           
            @Override
            protected void onError(AjaxRequestTarget target, RuntimeException e)
            {
               target.addComponent(feedbackPanel);
            }
           
            @Override
            protected boolean getUpdateModel()
            {
               return true;
            }
           
         });
      }
      return this;
   }

}
TOP

Related Classes of org.jboss.seam.example.wicket.FormInputBorder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.