Tag: JSTL
Size of collection in a JSP/DSP page
by Frank Kim on May.15, 2008, under JSTL, Page Development, Struts
Sometimes in a JSP/DSP page you will want to get the size of a collection and unless you are within a Range, ForEach or similar droplet you won’t have access to this value.
Struts has a nice solution using the bean:size tag. JSTL 1.1 has a nice solution using the fn:length function.
Here is an example of how to use Struts, DSPEL and JSTL to get the size of a collection.
<dspel:getvalueof param="book.pages" var="pages"
vartype="java.util.Collection"/>
<bean:size id="numPages" name="pages"/>
Number of Pages: <c:out value="${numPages}"/>
Number of Pages: <dspel:valueof value="${numPages}"/>
Here is an example of how to use JSTL 1.1 and DSPEL to get the size of a collection.
<dspel:getvalueof param="book.pages" var="pages"
vartype="java.util.Collection"/>
Number of Pages: <c:out value="${fn:length(pages)}"/>
Accessing RepositoryItems with JSTL
by Frank Kim on May.09, 2008, under JSTL, Page Development, Repository
Often we are accessing repository items in a JSP page like this.
<dspel:droplet name="RQLQueryForEach" var="query">
<dspel:param name="repository" bean="/betweengo/repository/Repository"/>
<dspel:param name="itemDescriptor" value="Account"/>
<dspel:param name="queryRQL" value="ALL"/>
<dspel:setvalue param="account" paramvalue="element"/>
<dspel:oparam name="output">
<dspel:valueof param="account.name"/><br/>
</dspel:oparam>
</dspel:droplet>
With JSTL we could try to display the name like this.
<c:out value="${query.account.name}"/>
If you are using JSP 2.0 you can display it even more simply.
${query.account.name}
However since account is a RepositoryItem object and there is no get method for the name property (i.e. it’s not a JavaBean object) the above will fail and produce an exception.
To get around this you can extend ATG’s RQLQueryForEach class by overriding the protected setElementParameter. In addition to setting the element parameter in the request you can set a new parameter which we will call “item”. This item is of class atg.beans.DynamicBeanMap and wraps a RepositoryItem.
public class RQLQueryForEachEL extends RQLQueryForEach {
protected void setElementParameter(DynamoHttpServletRequest pRequest,
String pElementName, Object pValue) {
super.setElementParameter(pRequest, pElementName, pValue);
DynamicBeanMap itemBean = new DynamicBeanMap(pValue, true);
pRequest.setParameter("item", itemBean);
}
}
Now we can access the repository item with JSTL like this.
${query.item.name}
