org.apache.commons.jelly.tags.core
Class UseBeanTag

java.lang.Object
  extended by org.apache.commons.jelly.TagSupport
      extended by org.apache.commons.jelly.DynaTagSupport
          extended by org.apache.commons.jelly.MapTagSupport
              extended by org.apache.commons.jelly.tags.core.UseBeanTag
All Implemented Interfaces:
DynaTag, BeanSource, Tag
Direct Known Subclasses:
UseListTag

public class UseBeanTag
extends MapTagSupport
implements BeanSource

A tag which instantiates an instance of the given class and then sets the properties on the bean. The class can be specified via a Class instance or a String which will be used to load the class using either the current thread's context class loader or the class loader used to load this Jelly library. This tag can be used it as follows,

 <j:useBean var="person" class="com.acme.Person" name="James" location="${loc}"/>
 <j:useBean var="order" class="${orderClass}" amount="12" price="123.456"/>
 

Version:
$Revision: 1807798 $
Author:
James Strachan

Field Summary
private  java.lang.Object bean
          the current bean instance
private  java.lang.Class defaultClass
          the default class to use if no Class is specified
private  java.util.Set ignoreProperties
          a Set of Strings of property names to ignore (remove from the Map of attributes before passing to ConvertUtils)
private  boolean ignoreUnknownProperties
          If this tag finds an attribute in the XML that's not ignored by ignoreProperties and isn't a bean property, should it throw an exception?
 
Fields inherited from class org.apache.commons.jelly.TagSupport
body, context, hasTrimmed, parent, shouldTrim
 
Constructor Summary
UseBeanTag()
           
UseBeanTag(java.lang.Class defaultClass)
           
 
Method Summary
protected  void addIgnoreProperty(java.lang.String name)
          Adds a name to the Set of property names that will be skipped when setting bean properties.
protected  java.lang.Class convertToClass(java.lang.Object classObject)
          Attempts to convert the given object to a Class instance.
 void doTag(XMLOutput output)
          Evaluates this tag after all the tags properties have been initialized.
 java.lang.Object getBean()
           
protected  java.lang.Class getDefaultClass()
          Allows derived classes to provide a default bean implementation class
protected  java.util.Set getIgnorePropertySet()
           
 boolean isIgnoreUnknownProperties()
           
protected  java.lang.Class loadClass(java.lang.String className)
          Loads the given class using the default class loading mechanism which is to try use the current Thread's context class loader first otherise use the class loader which loaded this class.
protected  java.lang.Object newInstance(java.lang.Class theClass, java.util.Map attributes, XMLOutput output)
          Creates a new instance of the given class, which by default will invoke the default constructor.
protected  void processBean(java.lang.String var, java.lang.Object bean)
          By default this will export the bean using the given variable if it is defined.
protected  void setBean(java.lang.Object bean)
          Allow derived classes to programatically set the bean
protected  void setBeanProperties(java.lang.Object bean, java.util.Map attributes)
          Sets the properties on the bean.
 void setIgnoreUnknownProperties(boolean ignoreUnknownProps)
          If this tag finds an attribute in the XML that's not ignored by ignoreProperties and isn't a bean property, should it throw an exception?
protected  void validateBeanProperties(java.lang.Object bean, java.util.Map attributes)
          If isIgnoreUnknownProperties() returns true, make sure that every non-ignored (addIgnoreProperty(String)) property matches a writable property on the target bean.
 
Methods inherited from class org.apache.commons.jelly.MapTagSupport
createAttributes, getAttributes, setAttribute
 
Methods inherited from class org.apache.commons.jelly.DynaTagSupport
getAttributeType
 
Methods inherited from class org.apache.commons.jelly.TagSupport
findAncestorWithClass, findAncestorWithClass, findAncestorWithClass, findAncestorWithClass, findAncestorWithClass, findAncestorWithClass, getBody, getBodyText, getBodyText, getContext, getParent, invokeBody, isEscapeText, isTrim, setBody, setContext, setEscapeText, setParent, setTrim, trimBody
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.commons.jelly.Tag
getBody, getContext, getParent, invokeBody, setBody, setContext, setParent
 

Field Detail

bean

private java.lang.Object bean
the current bean instance


defaultClass

private java.lang.Class defaultClass
the default class to use if no Class is specified


ignoreProperties

private java.util.Set ignoreProperties
a Set of Strings of property names to ignore (remove from the Map of attributes before passing to ConvertUtils)


ignoreUnknownProperties

private boolean ignoreUnknownProperties
If this tag finds an attribute in the XML that's not ignored by ignoreProperties and isn't a bean property, should it throw an exception?

See Also:
setIgnoreUnknownProperties(boolean)
Constructor Detail

UseBeanTag

public UseBeanTag()

UseBeanTag

public UseBeanTag(java.lang.Class defaultClass)
Method Detail

getBean

public java.lang.Object getBean()
Specified by:
getBean in interface BeanSource
Returns:
the bean that has just been created

doTag

public void doTag(XMLOutput output)
           throws JellyTagException
Description copied from interface: Tag
Evaluates this tag after all the tags properties have been initialized.

Specified by:
doTag in interface Tag
Throws:
JellyTagException

setBean

protected void setBean(java.lang.Object bean)
Allow derived classes to programatically set the bean


convertToClass

protected java.lang.Class convertToClass(java.lang.Object classObject)
                                  throws MissingAttributeException,
                                         java.lang.ClassNotFoundException
Attempts to convert the given object to a Class instance. If the classObject is already a Class it will be returned otherwise it will be converted to a String and loaded using the default class loading mechanism.

Throws:
MissingAttributeException
java.lang.ClassNotFoundException

loadClass

protected java.lang.Class loadClass(java.lang.String className)
                             throws java.lang.ClassNotFoundException
Loads the given class using the default class loading mechanism which is to try use the current Thread's context class loader first otherise use the class loader which loaded this class.

Throws:
java.lang.ClassNotFoundException

newInstance

protected java.lang.Object newInstance(java.lang.Class theClass,
                                       java.util.Map attributes,
                                       XMLOutput output)
                                throws JellyTagException
Creates a new instance of the given class, which by default will invoke the default constructor. Derived tags could do something different here.

Throws:
JellyTagException

setBeanProperties

protected void setBeanProperties(java.lang.Object bean,
                                 java.util.Map attributes)
                          throws JellyTagException
Sets the properties on the bean. Derived tags could implement some custom type conversion etc.

This method ignores all property names in the Set returned by getIgnorePropertySet().

Throws:
JellyTagException

validateBeanProperties

protected void validateBeanProperties(java.lang.Object bean,
                                      java.util.Map attributes)
                               throws JellyTagException
If isIgnoreUnknownProperties() returns true, make sure that every non-ignored (addIgnoreProperty(String)) property matches a writable property on the target bean.

Parameters:
bean - the bean to validate
attributes - the list of properties to validate
Throws:
JellyTagException - when a property is not writeable

processBean

protected void processBean(java.lang.String var,
                           java.lang.Object bean)
                    throws JellyTagException
By default this will export the bean using the given variable if it is defined. This Strategy method allows derived tags to process the beans in different ways such as to register this bean with its parent tag etc.

Throws:
JellyTagException

getDefaultClass

protected java.lang.Class getDefaultClass()
Allows derived classes to provide a default bean implementation class


addIgnoreProperty

protected void addIgnoreProperty(java.lang.String name)
Adds a name to the Set of property names that will be skipped when setting bean properties. In other words, names added here won't be set into the bean if they're present in the attribute Map.

Parameters:
name -

getIgnorePropertySet

protected java.util.Set getIgnorePropertySet()
Returns:
the Set of property names that should be ignored when setting the properties of the bean.

isIgnoreUnknownProperties

public boolean isIgnoreUnknownProperties()
Returns:
See Also:
#setIgnoreUnknownProperties(boolean)}

setIgnoreUnknownProperties

public void setIgnoreUnknownProperties(boolean ignoreUnknownProps)
If this tag finds an attribute in the XML that's not ignored by ignoreProperties and isn't a bean property, should it throw an exception?

Parameters:
ignoreUnknownProperties - Sets ignoreUnknownProperties.