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.
| Method from javax.el.ArrayELResolver Detail: |
public Class getCommonPropertyType(ELContext context,
Object base) {
if (base != null && base.getClass().isArray()) {
return Integer.class;
}
return null;
}
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. |
public Iterator getFeatureDescriptors(ELContext context,
Object base) {
return null;
}
Always returns null, since there is no reason to
iterate through set set of all integers.
The #getCommonPropertyType method returns sufficient
information about what properties this resolver accepts. |
public Class getType(ELContext context,
Object base,
Object property) {
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;
}
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. |
public Object getValue(ELContext context,
Object base,
Object property) {
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;
}
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. |
public boolean isReadOnly(ELContext context,
Object base,
Object property) {
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;
}
If the base object is a Java language array, returns whether a call to
#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. |
public void setValue(ELContext context,
Object base,
Object property,
Object val) {
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);
}
}
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. |