I am attempting to use a Decorator to put a checkbox in one column of a
table. I am running into a couple of issues, but I don't know if my
approach is correct.

My decorator code looks like this:

public class CheckboxDecorator extends Decorator {
   public CheckboxDecorator() {  super();  }
   public String getNullValue() { return null; }

   public String getCheckbox() {
       MyBean bean = (MyBean) getObject();
      StringBuffer s = new StringBuffer();
      s.append("<input type=checkbox name=\"verified\" value=\"on:");
      s.append(getListIndex());
      s.append("\"");
      boolean checked = bean.getVerified();
      if (checked) {
         s.append(" checked=\"true\"");
      }
      s.append("/>");
      return s.toString();
   }
}

Basically, I'm just returning an html formatted string that contains a
checkbox.

My (simplified) jsp:

<%@ taglib uri="/WEB-INF/display.tld" prefix="display" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:form action="/List" name="ListForm" type="path.to.ListForm">
<display:table
   width="80%"
   name="elements"
   scope="session"
   border="1"
   cellpadding="5"
   pagesize="8"
   export="true"
   requestURI="list.do"
   decorator="path.to.CheckboxDecorator">

   <display:column align="center" property="checkbox" title="Verify"/>
   <display:column align="center" property="ID"/>
    ...
</display:table>
<html:submit/>
</html:form>

And the relevant portion of the form bean:

public void setVerified(String aVerified) {
      StringTokenizer s = new StringTokenizer(aVerified, ":");
      String onoff = s.nextToken();
      int index = Integer.parseInt(s.nextToken());
      MyBean bean = (MyBean) mElements.get(index);
      if (onoff.equals("on")) {
         bean.setPublished(true);
      }
      else {
         bean.setPublished(false);
      }
   }


The checkbox column is displaying properly. The main problem I'm having is
that when I hit the submit button, I expect the setVerified method on the
form bean to be called for each box that is checked. This does not happen.
The method is only called for the first occurrence of a checked box. Why????

Another issue is with the Decorator.getListIndex method. I thought this
method would return the current object's index in the complete list, but it
returns the index on the current page. Just as the getViewIndex method
does. Is this a bug or a configuration issue?

Am I completely on the wrong track in trying to get a checkbox in a column?
Has anyone successfully implemented this? I would really appreciate some
help. I've been staring at this for quite a while now.

Thanks,

Kelly Clauson
[EMAIL PROTECTED]





-------------------------------------------------------
This SF.net email is sponsored by:
The Definitive IT and Networking Event. Be There!
NetWorld+Interop Las Vegas 2003 -- Register today!
http://ads.sourceforge.net/cgi-bin/redirect.pl?keyn0001en
_______________________________________________
displaytag-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/displaytag-user

Reply via email to