javax.faces.webapp
public class: ConverterTag [javadoc |
source]
java.lang.Object
javax.servlet.jsp.tagext.TagSupport
javax.faces.webapp.ConverterTag
All Implemented Interfaces:
IterationTag, Serializable
Deprecated! This
- has been partially replaced by
ConverterELTag . The remainder of the functionality, namely, the
binding facility and the implementation of the
#createConverter method, is now an implementation detail.
ConverterTag is a base class for all JSP custom actions
that create and register a Converter
instance on the
ValueHolder associated with our most immediate
surrounding instance of a tag whose implementation class is a subclass
of UIComponentTag . To avoid creating duplicate instances when
a page is redisplayed, creation and registration of a Converter
occurs only if the corresponding UIComponent was
created (by the owning UIComponentTag ) during the execution of the
current page.
This class may be used directly to implement a generic converter
registration tag (based on the converter-id specified by the
converterId
attribute), or as a base class for tag
instances that support specific Converter subclasses. This
converterId
attribute must refer to one of the well
known converter-ids, or a custom converter-id as defined in a
faces-config.xml
file.
Subclasses of this class must implement the
createConverter()
method, which creates and returns a
Converter instance. Any configuration properties that specify
behavior of this Converter must have been set by the
createConverter()
method. Generally, this occurs
by copying corresponding attribute values on the tag instance.
This tag creates no output to the page currently being created. It
is used solely for the side effect of Converter creation.
Methods from javax.servlet.jsp.tagext.TagSupport: |
---|
class$, doAfterBody, doEndTag, doStartTag, findAncestorWithClass, getId, getParent, getValue, getValues, release, removeValue, setId, setPageContext, setParent, setValue |
Methods from java.lang.Object: |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Method from javax.faces.webapp.ConverterTag Detail: |
protected Converter createConverter() throws JspException {
FacesContext context = FacesContext.getCurrentInstance();
Converter converter = null;
ValueExpression vb = null;
// If "binding" is set, use it to create a converter instance.
if (binding != null) {
try {
vb =
context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), binding, Object.class);
if (vb != null) {
converter = (Converter)vb.getValue(context.getELContext());
if (converter != null) {
return converter;
}
}
} catch (Exception e) {
throw new JspException(e);
}
}
// If "converterId" is set, use it to create the converter
// instance. If "converterId" and "binding" are both set, store the
// converter instance in the value of the property represented by
// the value binding expression.
if (converterId != null) {
try {
String converterIdVal = converterId;
if (UIComponentTag.isValueReference(converterId)) {
ValueExpression idBinding =
context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), converterId, Object.class);
converterIdVal = (String) idBinding.getValue(context.getELContext());
}
converter = context.getApplication().createConverter(converterIdVal);
if (converter != null) {
if (vb != null) {
vb.setValue(context.getELContext(), converter);
}
}
} catch (Exception e) {
throw new JspException(e);
}
}
return converter;
} Deprecated! |
public int doStartTag() throws JspException {
// Locate our parent UIComponentTag
UIComponentClassicTagBase tag =
UIComponentClassicTagBase.getParentUIComponentClassicTagBase(pageContext);
if (tag == null) { // PENDING - i18n
throw new JspException("Not nested in a UIComponentTag Error for tag with handler class:"+
this.getClass().getName());
}
// Nothing to do unless this tag created a component
if (!tag.getCreated()) {
return (SKIP_BODY);
}
UIComponent component = tag.getComponentInstance();
if (component == null) {
//PENDING i18n
throw new JspException("Can't create Component from tag.");
}
if (!(component instanceof ValueHolder)) {
//PENDING i18n
throw new JspException("Not nested in a tag of proper type. Error for tag with handler class:"+
this.getClass().getName());
}
Converter converter = createConverter();
if (converter == null) {
//noinspection NonConstantStringShouldBeStringBuffer
String converterError = null;
if (binding != null) {
converterError = binding;
}
if (converterId != null) {
if (converterError != null) {
converterError += " or " + converterId;
} else {
converterError = converterId;
}
}
// PENDING i18n
throw new JspException("Can't create class of type:"+
"javax.faces.convert.Converter for:"+converterError);
}
ValueHolder vh = (ValueHolder)component;
FacesContext context = FacesContext.getCurrentInstance();
// Register an instance with the appropriate component
vh.setConverter(converter);
// Once the converter has been set, attempt to convert the
// incoming "value"
Object localValue = vh.getLocalValue();
if (localValue instanceof String) {
try {
localValue = converter.getAsObject(context, (UIComponent)vh, (String) localValue);
vh.setValue(localValue);
}
catch (ConverterException ce) {
// PENDING - Ignore? Throw an exception? Set the local
// value back to "null" and log a warning?
}
}
return (SKIP_BODY);
} Deprecated!Create a new instance of the specified Converter
class, and register it with the UIComponent instance associated
with our most immediately surrounding UIComponentTag instance, if
the UIComponent instance was created by this execution of the
containing JSP page. If the localValue of the
UIComponent is a String, attempt to convert it.
|
public void release() {
this.converterId = null;
} Deprecated! |
public void setBinding(String binding) throws JspException {
if (binding!= null && !UIComponentTag.isValueReference(binding)) {
// PENDING i18n
throw new JspException("Invalid Expression:"+binding);
}
this.binding = binding;
} Deprecated!Set the expression that will be used to create a ValueExpression
that references a backing bean property of the Converter instance to
be created.
|
public void setConverterId(String converterId) {
this.converterId = converterId;
} Deprecated! |