You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Waimun Yeow <wa...@dev.java.net> on 2006/08/15 17:11:45 UTC

DynamicSelectionList and ArrayIndexOutOfBoundsException

I am using the DynamicSelectionList (Tap 3) component managed at the  
Tassel site http://equalitylearning.org/Tassel/app?service=direct/1/ 
Search/viewComponent&sp=SmatmshDynamicSelectionList

I followed the BikeMaker demo with source code at http:// 
lombok.demon.co.uk/tapestryDemo/welcome

The BikeMaker example above uses StringPropertySelectionModel and  
String[] objects for the drop-down selection lists. However, I  
modified my program to use custom PropertySelectionModel(s) and  
custom objects as value objects in the models.

On the first render of the page, the DynamicSelectionList component  
works exactly what I want to achieve. The options and their labels  
are displayed correctly in the selection lists, and selecting an  
option in the parent list reflects the correct items in the child  
list. The problem is there is an ArrayIndexOutOfBoundsException while  
trying the submit the form. Following the trace and component source  
tells me that it is trying to retrieve an object at -1 position. I am  
not sure why.

Has anyone encountered this problem before using custom objects for  
the DynamicSelectionList component (Tap 3)? I have attached the  
source code of the page and also the stack trace. Please let me know  
if there's anything you need to figure out this problem. Thanks.

-waimun

/* start of source */

public abstract class AddReferral extends BasePage implements
		PageRenderListener {

	public abstract UserDepartmentDao getUserDepartmentDao();

	public abstract IPropertySelectionModel getDepartmentSelectionModel();

	public abstract void setDepartmentSelectionModel(
			IPropertySelectionModel selectionModel);

	public abstract UserAccountDao getUserAccountDao();

	public abstract List getUsersByDepartmentList();

	public abstract void setUsersByDepartmentList(List users);

	public void pageBeginRender(PageEvent event) {

		List allDepartments = getUserDepartmentDao().findAll();

		if (getDepartmentSelectionModel() == null) {
			setDepartmentSelectionModel(new DepartmentSelectionModel(
					allDepartments));
		}

		// get users by department from the department selection model.

		DepartmentSelectionModel deptModel = (DepartmentSelectionModel)  
getDepartmentSelectionModel();

		for (Iterator it = deptModel.getDepartmentList().iterator(); it
				.hasNext();) {

			List usersByDepartment = null;

			UserDepartment d = (UserDepartment) it.next();

			usersByDepartment = getUserAccountDao().findByDepartment(d);

			getUsersByDepartmentList().add(
					new UsersByDepartmentSelectionModel(usersByDepartment));

		}

	}

}

/* end of source */

/*
Stack Trace:

     * java.util.ArrayList.get(ArrayList.java:323)
     *  
man.library.components.dynamicSelectionList.DynamicSelectionList.getChil 
dModel(DynamicSelectionList.java:309)
     *  
man.library.components.dynamicSelectionList.DynamicSelectionList.updateV 
alue(DynamicSelectionList.java:189)
     *  
man.library.components.dynamicSelectionList.DynamicSelectionList.renderC 
omponent(DynamicSelectionList.java:126)
     * org.apache.tapestry.AbstractComponent.render 
(AbstractComponent.java:857)
     * org.apache.tapestry.AbstractComponent.renderBody 
(AbstractComponent.java:624)
     * org.apache.tapestry.form.Form.renderComponent(Form.java:362)
     * org.apache.tapestry.AbstractComponent.render 
(AbstractComponent.java:857)
     * org.apache.tapestry.form.Form.rewind(Form.java:568)
     * org.apache.tapestry.engine.RequestCycle.rewindForm 
(RequestCycle.java:432)
     * org.apache.tapestry.form.Form.trigger(Form.java:582)
     * org.apache.tapestry.engine.DirectService.service 
(DirectService.java:169)
     * org.apache.tapestry.engine.AbstractEngine.service 
(AbstractEngine.java:889)
     * org.apache.tapestry.ApplicationServlet.doService 
(ApplicationServlet.java:198)
     * org.apache.tapestry.ApplicationServlet.doPost 
(ApplicationServlet.java:327)
     * javax.servlet.http.HttpServlet.service(HttpServlet.java:154)
     * javax.servlet.http.HttpServlet.service(HttpServlet.java:92)
     * com.caucho.server.dispatch.ServletFilterChain.doFilter 
(ServletFilterChain.java:99)
     * com.caucho.server.webapp.WebAppFilterChain.doFilter 
(WebAppFilterChain.java:163)
     * com.caucho.server.dispatch.ServletInvocation.service 
(ServletInvocation.java:208)
     * com.caucho.server.http.HttpRequest.handleRequest 
(HttpRequest.java:259)
     * com.caucho.server.port.TcpConnection.run(TcpConnection.java:363)
     * com.caucho.util.ThreadPool.runTasks(ThreadPool.java:490)
     * com.caucho.util.ThreadPool.run(ThreadPool.java:423)
     * java.lang.Thread.run(Thread.java:613)

*/


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: DynamicSelectionList and ArrayIndexOutOfBoundsException

Posted by Nick Westgate <ni...@key-planning.co.jp>.
Hi Waimin.

 > The BikeMaker example above uses StringPropertySelectionModel and
 > String[] objects for the drop-down selection lists. However, I  modified
 > my program to use custom PropertySelectionModel(s) and  custom objects
 > as value objects in the models.

There are two versions of the demo and one of them uses custom models,
*not* StringPropertySelectionModel:

http://lombok.demon.co.uk/tapestryDemo/welcome?service=page/TestDSLComponent2
http://lombok.demon.co.uk/tapestryDemo/welcome?service=page/TestDSLComponent2Source

You should look carefully at that example.

If you still can't find the problem please post your .page file and
perhaps the child model code.

Cheers,
Nick.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org