ArrayELResolverpublic class ArrayELResolver extends ELResolver Defines property resolution behavior on arrays.
This resolver handles base objects that are Java language arrays.
It accepts any object as a property and coerces that object into an
integer index into the array. The resulting value is the value in the array
at that index.
This resolver can be constructed in read-only mode, which means that
{@link #isReadOnly} will always return true and
{@link #setValue} will always throw
PropertyNotWritableException .
ELResolver s are combined together using
{@link CompositeELResolver}s, to define rich semantics for evaluating
an expression. See the javadocs for {@link ELResolver} for details.
|
Fields Summary |
---|
private boolean | isReadOnly |
Constructors Summary |
---|
public ArrayELResolver()Creates a new read/write ArrayELResolver .
this.isReadOnly = false;
| public ArrayELResolver(boolean isReadOnly)Creates a new ArrayELResolver whose read-only status is
determined by the given parameter.
this.isReadOnly = isReadOnly;
|
Methods Summary |
---|
public java.lang.Class | getCommonPropertyType(javax.el.ELContext context, java.lang.Object base)If the base object is a Java language array, returns the most general
type that this resolver accepts for the property argument.
Otherwise, returns null .
Assuming the base is an array, this method will always return
Integer.class . This is because arrays accept integers
for their index.
if (base != null && base.getClass().isArray()) {
return Integer.class;
}
return null;
| public java.util.Iterator | getFeatureDescriptors(javax.el.ELContext context, java.lang.Object base)Always returns null , since there is no reason to
iterate through set set of all integers.
The {@link #getCommonPropertyType} method returns sufficient
information about what properties this resolver accepts.
return null;
| public java.lang.Class | getType(javax.el.ELContext context, java.lang.Object base, java.lang.Object property)If the base object is an array, returns the most general acceptable type
for a value in this array.
If the base is a array , the
propertyResolved property of the ELContext
object must be set to true by this resolver, before
returning. If this property is not true after this method
is called, the caller should ignore the return value.
Assuming the base is an array , this method will always
return base.getClass().getComponentType() , which is
the most general type of component that can be stored at any given
index in the array.
if (context == null) {
throw new NullPointerException();
}
if (base != null && base.getClass().isArray()) {
context.setPropertyResolved(true);
int index = toInteger (property);
if (index < 0 || index >= Array.getLength(base)) {
throw new PropertyNotFoundException();
}
return base.getClass().getComponentType();
}
return null;
| public java.lang.Object | getValue(javax.el.ELContext context, java.lang.Object base, java.lang.Object property)If the base object is a Java language array, returns the value at the
given index. The index is specified by the property
argument, and coerced into an integer. If the coercion could not be
performed, an IllegalArgumentException is thrown. If the
index is out of bounds, null is returned.
If the base is a Java language array, the
propertyResolved property of the ELContext
object must be set to true by this resolver, before
returning. If this property is not true after this
method is called, the caller should ignore the return value.
if (context == null) {
throw new NullPointerException();
}
if (base != null && base.getClass().isArray()) {
context.setPropertyResolved(true);
int index = toInteger (property);
if (index >= 0 && index < Array.getLength(base)) {
return Array.get(base, index);
}
}
return null;
| public boolean | isReadOnly(javax.el.ELContext context, java.lang.Object base, java.lang.Object property)If the base object is a Java language array, returns whether a call to
{@link #setValue} will always fail.
If the base is a Java language array, the
propertyResolved property of the ELContext
object must be set to true by this resolver, before
returning. If this property is not true after this method
is called, the caller should ignore the return value.
If this resolver was constructed in read-only mode, this method will
always return true . Otherwise, it returns
false .
if (context == null) {
throw new NullPointerException();
}
if (base != null && base.getClass().isArray()) {
context.setPropertyResolved(true);
int index = toInteger (property);
if (index < 0 || index >= Array.getLength(base)) {
throw new PropertyNotFoundException();
}
}
return isReadOnly;
| public void | setValue(javax.el.ELContext context, java.lang.Object base, java.lang.Object property, java.lang.Object val)If the base object is a Java language array, attempts to set the
value at the given index with the given value. The index is specified
by the property argument, and coerced into an integer.
If the coercion could not be performed, an
IllegalArgumentException is thrown. If the index is
out of bounds, a PropertyNotFoundException is thrown.
If the base is a Java language array, the
propertyResolved property of the ELContext
object must be set to true by this resolver, before
returning. If this property is not true after this method
is called, the caller can safely assume no value was set.
If this resolver was constructed in read-only mode, this method will
always throw PropertyNotWritableException .
if (context == null) {
throw new NullPointerException();
}
if (base != null && base.getClass().isArray()) {
context.setPropertyResolved(true);
if (isReadOnly) {
throw new PropertyNotWritableException();
}
Class<?> type = base.getClass().getComponentType();
if (val != null && ! type.isAssignableFrom(val.getClass())) {
throw new ClassCastException();
}
int index = toInteger (property);
if (index < 0 || index >= Array.getLength(base)) {
throw new PropertyNotFoundException();
}
Array.set(base, index, val);
}
| private int | toInteger(java.lang.Object p)
if (p instanceof Integer) {
return ((Integer) p).intValue();
}
if (p instanceof Character) {
return ((Character) p).charValue();
}
if (p instanceof Boolean) {
return ((Boolean) p).booleanValue()? 1: 0;
}
if (p instanceof Number) {
return ((Number) p).intValue();
}
if (p instanceof String) {
return Integer.parseInt((String) p);
}
throw new IllegalArgumentException();
|
|