Menu

Decorator issue - can't access property value

Help
chriscw
2005-12-10
2012-10-09
  • chriscw

    chriscw - 2005-12-10

    Hi,

    I use JSTL sql tag library to generate a result set (flst) based on the following SQL query:

    select group_name from user_groups as c where c.login_id like 'xxx' order by c.group_name

    I use the following displaytag table to display result.

    <display:table name="${flst.rows}" pagesize="25" defaultsort="1" defaultorder="ascending" export="true">
    <display:column property="group_name" title="Group Name" sortable="true"/>
    </display:table>

    I'd like to add one more column after group_name that displays a HTML link based on the group_name. I changed the table code into:

    <display:table name="${flst.rows}" pagesize="25" defaultsort="1" defaultorder="ascending" export="true" decorator="org.displaytag.customize.Wrapper">
    <display:column property="group_name" title="Group Name" sortable="true"/>
    <display:column property="groupFiles" title="Group Name" />
    </display:table>

    Below is the code I wrote for the wrapper.java program.

    package org.displaytag.customize;

    import org.displaytag.decorator.TableDecorator;

    public class Wrapper
    extends TableDecorator
    {
    public String group_name;

    public String getGroupFiles()
    {
       Wrapper object = (Wrapper)getCurrentRowObject();
    
       String groupName = object.getGroup_name();
       return &quot;&lt;a href=\&quot;cfor.jsp?groupName=&quot; + groupName +&quot;\&quot;&gt;Files Owned&lt;/a&gt;&quot;;
    
    }
    public String getGroup_name ()
    {
        return group_name;
    }
    public void setGroup_name (String value)
    {
        group_name = value;
    }
    

    }

    I am getting the following errors:

    javax.servlet.ServletException: Error looking up property "groupFiles" in object type "org.displaytag.customize.Wrapper".
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
    org.apache.jsp.cur_jsp._jspService(org.apache.jsp.cur_jsp:260)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

    Obviously, I am kind of new to the Java and displaytag library. Can anyone here point out what I did wrong?

    Thanks,

     
    • Rick Justesen

      Rick Justesen - 2005-12-14

      I put this same code into a test project that I use and it worked fine for me. Are you sure that your re-compiled decorator class is being deployed into your servlet container?

       
      • chriscw

        chriscw - 2005-12-15

        Hi,

        I use Tomcat 5.59 and myeclipseide plug-in with Eclipse for this project. The class file appears to be deployed properly. I am still getting the following error message:

        Exception: [.LookupUtil] Error looking up property "groupFiles" in object type "org.displaytag.customize.Wrapper". Cause: null
        org.displaytag.util.LookupUtil.getBeanProperty(LookupUtil.java:220)
        org.displaytag.model.Column.getValue(Column.java:105)
        org.displaytag.model.Column.createChoppedAndLinkedValue(Column.java:162)
        org.displaytag.model.Column.getOpenTag(Column.java:138)
        org.displaytag.tags.TableTag.writeTableBody(TableTag.java:1645)
        org.displaytag.tags.TableTag.writeHTMLData(TableTag.java:1418)
        org.displaytag.tags.TableTag.doEndTag(TableTag.java:1039)
        org.apache.jsp.cur_jsp._jspx_meth_display_table_0(org.apache.jsp.cur_jsp:856)
        org.apache.jsp.cur_jsp._jspx_meth_c_when_5(org.apache.jsp.cur_jsp:801)
        org.apache.jsp.cur_jsp._jspx_meth_c_choose_3(org.apache.jsp.cur_jsp:766)
        org.apache.jsp.cur_jsp._jspService(org.apache.jsp.cur_jsp:245)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

        Thanks,

         
        • Rick Justesen

          Rick Justesen - 2005-12-16

          This is the same environment that I am using. Can you set a breakpoint on your decorator class in the constructor so you can see if it is being called correctly?

           
          • Bryan H

            Bryan H - 2006-01-14

            I ran into a very similar problem and here is the solution I stumbled upon:

            If the name of the structure you store your data in is named "incorrectly" the decorator will fail with the error message you saw.

            --- Example ---
            Will Fail:

            public String getFoo() {
            BODData bd = (BODData) this.getCurrentRowObject();
            ...
            return results;
            }

            Will Work:

            public String getFoo() {
            BoData bd = (BoData) this.getCurrentRowObject();
            ...
            return results;
            }
            --- End Example ---
            Note that the only change was to rename "BODData" to "BoData".

            It also appears that if the decorator is "incorrectly named" the getter cannot be found. In the example below, the field called "foo", normally mapped to "getFoo()" will not be found, as it will look for "getfoo()" -- violating the spec. I believe this error is due to BeanUtils, but don't have time to track it down.

            --- Example ---
            Will Fail:

            public class DecoratorBODList extends TableDecorator {
            public String getFoo() {
            ...
            }
            ...
            }

            Will Work:

            public class DecoratorBoList extends TableDecorator {
            public String getFoo() {
            ...
            }
            ...
            }

            --- End Example ---

             
    • chriscw

      chriscw - 2005-12-15

      My previous post looks kind of weird with utf-8 encoding. I am reposting the error message with ISO-8859-1 encoding enabled on my browser.

      Exception: [.LookupUtil] Error looking up property "groupFiles" in object type "org.displaytag.customize.Wrapper". Cause: null
      org.displaytag.util.LookupUtil.getBeanProperty(LookupUtil.java:220)
      org.displaytag.model.Column.getValue(Column.java:105)
      org.displaytag.model.Column.createChoppedAndLinkedValue(Column.java:162)
      org.displaytag.model.Column.getOpenTag(Column.java:138)
      org.displaytag.tags.TableTag.writeTableBody(TableTag.java:1645)
      org.displaytag.tags.TableTag.writeHTMLData(TableTag.java:1418)
      org.displaytag.tags.TableTag.doEndTag(TableTag.java:1039)
      org.apache.jsp.cur_jsp._jspx_meth_display_table_0(org.apache.jsp.cur_jsp:856)
      org.apache.jsp.cur_jsp._jspx_meth_c_when_5(org.apache.jsp.cur_jsp:801)
      org.apache.jsp.cur_jsp._jspx_meth_c_choose_3(org.apache.jsp.cur_jsp:766)
      org.apache.jsp.cur_jsp._jspService(org.apache.jsp.cur_jsp:245)
      org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
      org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
      org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
      javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

       

Log in to post a comment.