Sorry to reply to myself, but I forgot to provide the relevant part of the 
component spec.

<component-specification
class="com.workscape.comp.web.DirectReportsTab"
allow-informal-parameters="no">

<!-- User controlled number of direct reports per page -->
<property-specification name="directReportsPerPage" type="int"/>
<property-specification name="tableModel" 
type="org.apache.tapestry.contrib.table.model.ITableModel" 
persistent="yes"/>

<!-- Direct Reports Table -->
<component id="directReportsTable" type="contrib:Table">
<binding name="tableModel" expression="tableModel"/>
<binding name="rowsClass" expression="beans.evenOdd.next"/>
</component>

</component-specification>


On 4/28/05, Tim Downey <[EMAIL PROTECTED]> wrote:
> 
> Hi,
> 
> I'm receiving an ApplicationRuntimeException whenever I attempt to
> sort a Table component. The initial load of the Table component is
> fine, but any attempts to sort cause the ApplicationRuntimeException
> with this message:
> 
> "Either the tableModel parameter or both source and columns parameters
> must be specified by component
> CompPlannerHome/directReports.directReportsTable.tableView"
> 
> The offending Table component is embedded in a custom tab component
> that I am building. So long as the Table was directly embedded in a
> Page, I have not had a problem. I can't seem to sort out what the
> difference is.
> 
> I have attempted to step through the debugger to sort out what is
> going on. Here's a synopsis of what I've seen. Hopefully someone can
> shed some light.
> 
> After clicking the column header to trigger the sort, I stepped
> through the listener cycle. Throughout the listener cycle, the
> TableModel is non-null and available. After the listener cycle,
> during the render cycle on my custom tab component, it is null. In
> fact, none of the bindings for my custom tab component have been set
> yet. I'm not really sure why this is.
> 
> As I mentioned, it works fine on the initial request. Requests to
> change the sort seem to causes the problem.
> 
> Also, the call to pageBeginRender on my custom tab component that
> happens just prior to the renderComponent on the Table is able to
> see/access the table model for the contained Table component.
> 
> Here's a stack trace. I hope someone can help. I've been struggling
> with this for two days....
> 
> 
> ----------------------------------------------------------------------------------------------------------------------------------
> Either the tableModel parameter or both source and columns parameters
> must be specified by component
> CompPlannerHome/directReports.directReportsTable.tableView
> Stack Trace:
> 
> org.apache.tapestry.contrib.table.components.TableView.getTableModel(
> TableView.java:199)
> org.apache.tapestry.contrib.table.components.TableView.validateValues(
> TableView.java:439)
> org.apache.tapestry.contrib.table.components.TableView.renderComponent(
> TableView.java:471)
> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
> org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:118)
> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
> org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:118)
> 
> com.workscape.comp.web.component.secure.component.ProtectedComponent.renderComponent
> (ProtectedComponent.java:44)
> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
> org.apache.tapestry.components.Delegator.renderComponent(Delegator.java
> :45)
> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
> org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:118)
> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
> org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java
> :624)
> org.apache.tapestry.components.RenderBody.renderComponent(RenderBody.java
> :45)
> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
> org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java
> :624)
> org.apache.tapestry.html.Body.renderComponent(Body.java:269)
> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
> org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java
> :624)
> org.apache.tapestry.html.Shell.renderComponent(Shell.java:124)
> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
> org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:118)
> 
> com.workscape.comp.web.component.secure.component.ProtectedComponent.renderComponent
> (ProtectedComponent.java:44)
> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
> org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:118)
> org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
> org.apache.tapestry.AbstractPage.renderPage(AbstractPage.java:300)
> 
> com.workscape.comp.web.component.secure.component.page.ProtectedPage.renderPage
> (ProtectedPage.java:71)
> org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:368)
> org.apache.tapestry.engine.AbstractEngine.renderResponse(
> AbstractEngine.java:732)
> org.apache.tapestry.engine.DirectService.service(DirectService.java:174)
> org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:872)
> org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java
> :197)
> com.workscape.comp.service.web.CPServlet.doService(CPServlet.java:65)
> org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:158)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(
> ServletStubImpl.java:971)
> weblogic.servlet.internal.ServletStubImpl.invokeServlet(
> ServletStubImpl.java:402)
> weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java
> :27)
> com.workscape.directory.v1.interceptor.securty.AuthFilter$1.run(
> AuthFilter.java:187)
> java.security.AccessController.doPrivileged(Native Method)
> javax.security.auth.Subject.doAs(Subject.java:379)
> com.workscape.directory.v1.interceptor.securty.AuthFilter.doFilter(
> AuthFilter.java:183)
> sun.reflect.GeneratedMethodAccessor197.invoke(Unknown Source)
> sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:25)
> java.lang.reflect.Method.invoke(Method.java:324)
> com.workscape.directory.v1.interceptor.ServiceInterceptor.invoke(
> ServiceInterceptor.java:131)
> com.workscape.directory.v1.interceptor.stddb.STDDBInterceptor.invoke(
> STDDBInterceptor.java:70)
> 
> com.workscape.directory.v1.interceptor.session.HTTPSessionInterceptor.invoke
> (HTTPSessionInterceptor.java:62)
> 
> com.workscape.directory.v1.interceptor.hibernate3.SessionInterceptor.invoke
> (SessionInterceptor.java:58)
> 
> com.workscape.directory.v1.interceptor.tracer.ConnectionLeakDetectionTracer.invokeInternal
> (ConnectionLeakDetectionTracer.java:113)
> com.workscape.directory.v1.interceptor.tracer.BaseTracer.invoke(
> BaseTracer.java:80)
> com.workscape.directory.v1.interceptor.ServiceInterceptor.invoke(
> ServiceInterceptor.java:104)
> $Proxy20.doFilter(Unknown Source)
> com.workscape.directory.v1.interceptor.http.HTTPInterceptor.doFilter(
> HTTPInterceptor.java:79)
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java
> :27)
> weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run
> (WebAppServletContext.java:6356)
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(
> AuthenticatedSubject.java:317)
> weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
> weblogic.servlet.internal.WebAppServletContext.invokeServlet(
> WebAppServletContext.java:3635)
> weblogic.servlet.internal.ServletRequestImpl.execute(
> ServletRequestImpl.java:2585)
> weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
> weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
>

Reply via email to