You are viewing a plain text version of this content. The canonical link for it is here.
Posted to taglibs-dev@jakarta.apache.org by "Dean A. Hoover" <dh...@rochester.rr.com> on 2004/05/10 18:53:15 UTC

getting a collection

I apologize if this is the wrong place to ask, but I am
having trouble solving this problem. I have written
a custom JSP tag for use in a struts 1.1 application
I am implementing. I have a domain object called
Series which has a method getCategoryIds that
returns a HashSet of Integers. A Series object
"series" is in the session when the following
JSP get invoked (its actually a struts-tile, probably
to complicate things further):

<%@ page isELIgnored="false" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-tiles" prefix="tiles" %>
<%@ taglib uri="/tags/els" prefix="els" %>
<!-- begin SeriesProps -->
<html:xhtml/>
<tr>
<td valign="top"><tiles:get name="titleLabel"/></td>
<td align="left"><html:text size="30" property="title"/></td>
</tr>
<td valign="top"><tiles:get name="descriptionLabel"/></td>
<td align="left">
<html:textarea cols="30" rows="3" property="description"/>
</td>
<tr>
<td valign="top"><tiles:get name="categoriesLabel"/></td>
<td align="left">
<els:categories property="categoryId" labelClass="text" 
var="${series.categoryIds}"/>
</td>
</tr>
...

Anyway, I have been looking at other custom tags trying to figure out how
to get the collection into the custom tag I've written. It appears that 
a class
called ExpressionEvaluatorManager would be used to get the collection
from the expression: ${series.categoryIds}, yet it goes too far and converts
the collection to a String like: "[1, 2, 7]". In the TLD for the tag I 
write:

<tag>
  <name>categories</name>
  <tagclass>fi.els.tags.CategoriesTag</tagclass>
  <attribute>
    <name>property</name>
    <required>true</required>
  </attribute>
  <attribute>
    <name>labelClass</name>
    <required>true</required>
  </attribute>
  <attribute>
    <name>var</name>
    <type>java.lang.Object</type>
    <rtexprvalue>true</rtexprvalue>
  </attribute>
</tag>

I attempt to get the collection back into the
tag as follows:

public class CategoriesTag extends TagSupport
{    public CategoriesTag()
    {
        super();
        init();
    }

    public int doStartTag() throws JspException
    {
        if (this.var != null)
        {
            Object collection = ExpressionEvaluatorManager.evaluate("var",
             this.var, Object.class, this, pageContext);

            if (collection != null)
            {
                if (collection instanceof java.lang.String[])
                    log.debug("AAA: String[]");
                else if (collection instanceof java.lang.String)
                    log.debug("AAA: String");
                else
                    log.debug("AAA: Other");
            }
        }
...
    public void setVar
    (
      String var
    )
    {
        log.debug("AAA: setting var = '" + var + "'");
        this.var = var;
    }

    private void init()
    {
        categoryIds = new HashSet();
        var = null;
    }
...
}

Like I said earlier, the HashSet collection is getting transformed
into a String. Can anyone tell me what I am doing wrong?

Thanks.
Dean


---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-dev-help@jakarta.apache.org