Checking attribute exists in JSP
Make use of JSTL c:catch
.
<c:catch var="exception">${myObject.myAttribute}</c:catch>
<c:if test="${not empty exception}">Attribute not available.</c:if>
You can readily create a custom function to check for the property, as per vivin's blog post.
In short, if you already have your own taglib its just a matter of creating a static 'hasProperty' method...
import java.beans.PropertyDescriptor;
import org.apache.commons.beanutils.PropertyUtils;
...
public static boolean hasProperty(Object o, String propertyName) {
if (o == null || propertyName == null) {
return false;
}
try
{
return PropertyUtils.getPropertyDescriptor(o, propertyName) != null;
}
catch (Exception e)
{
return false;
}
}
...and adding five lines to your TLD...
<function>
<name>hasProperty</name>
<function-class>my.package.MyUtilClass</function-class>
<function-signature>boolean hasProperty(java.lang.Object,
java.lang.String)
</function-signature>
</function>
... and calling it in your JSP
<c:if test="${myTld:hasProperty(myObject, 'myAttribute')}">
<c:set var="foo" value="${myObject.myAttribute}" />
</c:if>
The accepted answer may have some side effects when I just want to test if the object has a field, but do not want to output the value of the field. In the mentioned case, I use the snippet below:
<c:catch var="exception">
<c:if test="${object.class.getDeclaredField(field) ne null}">
</c:if>
</c:catch>
hope this helps.