You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Richard Mixon <rn...@custco.biz> on 2003/04/08 21:09:04 UTC

How to do a 2D table? getter reflection problem

We are trying to do a simple grid form, with rows and columns. Any
help/pointers are appreciated.

We are able to display the form fine. When the form is submitted from the
browser, an exception occurs when populating the form bean. The main form
bean has a collection of "sub" form beans for each row.

 The exception is:
  ...
  root cause

  java.lang.NullPointerException
    at
org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.
java:515)
    at
org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.
java:428)
    at
org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.j
ava:770)
    at
org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:80
1)
    at
org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:881)
    at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
    at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1096)
    at
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.j
ava:816)
    at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1420)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:520)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    ...

Maybe our form bean is not setup properly, but we could not find a good
example to follow. Here is our JSP code:

     ...
	<logic:notEmpty name="classGridObject" property="rows">
    <nested:iterate name="classGridObject" property="rows" indexId="rowId">
  <TR>
	  <TD>
	  <nested:text property="student" readonly="true" size="24"/>
	  </TD>
	  <TD>
	  <nested:checkbox property="selected" value="true" />
	  </TD>
	  <nested:iterate property="results" indexId="colId">
	  <TD>
	      <nested:text property="resultValue" size="2" readonly="true"
disabled="true"/>
	  </TD>
	  </nested:iterate>
	  <logic:lessThan name="assessmentCt" value="<%= new
Integer(classGridObject.getAssessmentCt()).toString() %>" >
         <TD><input type="text" name="<%= "rows[" +
pageContext.getAttribute("rowId") + "].results[" +
		        (((Integer)pageContext.getAttribute("colId")).intValue() + 1) +
"].resultValue" %>" size="2"/></TD>
      </logic:lessThan>
  </TR>
	</nested:iterate>
	</logic:notEmpty>
  ...

Here's the HTML the browser sees:

  ...
  <TR>
	  <TD>
	  <input type="text" name="rows[0].student" size="24" value="Madison,
James" readonly="readonly" />
	  </TD>
	  <TD>
	  <input type="checkbox" name="rows[0].selected" value="true" />
	  </TD>

	  <TD>
	      <input type="text" name="rows[0].results[0].resultValue" size="2"
value="1.0" disabled="disabled" readonly="readonly" />
	  </TD>

	  <TD>
	      <input type="text" name="rows[0].results[1].resultValue" size="2"
value="2.0" disabled="disabled" readonly="readonly" />
	  </TD>

	  <TD>
	      <input type="text" name="rows[0].results[2].resultValue" size="2"
value="3.0" disabled="disabled" readonly="readonly" />
	  </TD>


         <TD><input type="text" name="rows[0].results[3].resultValue"
size="2"/></TD>

  </TR>

  <TR>
	  <TD>
	  <input type="text" name="rows[1].student" size="24" value="Arragon, Jean"
readonly="readonly" />
	  </TD>
	  <TD>
	  <input type="checkbox" name="rows[1].selected" value="true" />
	  </TD>

	  <TD>
	      <input type="text" name="rows[1].results[0].resultValue" size="2"
value="0.0" disabled="disabled" readonly="readonly" />
	  </TD>

	  <TD>
	      <input type="text" name="rows[1].results[1].resultValue" size="2"
value="1.0" disabled="disabled" readonly="readonly" />
	  </TD>

	  <TD>
	      <input type="text" name="rows[1].results[2].resultValue" size="2"
value="3.0" disabled="disabled" readonly="readonly" />
	  </TD>


         <TD><input type="text" name="rows[1].results[3].resultValue"
size="2"/></TD>

  </TR>

  <TR>
	  <TD>
	  <input type="text" name="rows[2].student" size="24" value="Sellers,
Peter" readonly="readonly" />
	  </TD>
	  <TD>
	  <input type="checkbox" name="rows[2].selected" value="true" />
	  </TD>

	  <TD>
	      <input type="text" name="rows[2].results[0].resultValue" size="2"
value="3.0" disabled="disabled" readonly="readonly" />
	  </TD>

	  <TD>
	      <input type="text" name="rows[2].results[1].resultValue" size="2"
value="4.0" disabled="disabled" readonly="readonly" />
	  </TD>

	  <TD>
	      <input type="text" name="rows[2].results[2].resultValue" size="2"
value="5.0" disabled="disabled" readonly="readonly" />
	  </TD>


         <TD><input type="text" name="rows[2].results[3].resultValue"
size="2"/></TD>

  </TR>
  ...

Thanks - Richard



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