[Tapestry4] tapestry4 的分页,点击下页的时候出错?!

lyo 2007-05-07
我使用 Tapestry4的Table组件分页的时候,第一页是可以显示的,但是当我点击下一页的时候,就报错了:
org.apache.hivemind.ApplicationRuntimeException 
Either the tableModel parameter or both source and columns parameters must be specified by component Home/$TableView 
Stack Trace: 
org.apache.tapestry.contrib.table.components.TableView.getTableModel(TableView.java:220) 
org.apache.tapestry.contrib.table.components.TablePages.setCurrentPage(TablePages.java:191) 
org.apache.tapestry.contrib.table.components.TablePages.changePage(TablePages.java:183) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
java.lang.reflect.Method.invoke(Method.java:324) 
org.apache.tapestry.listener.ListenerMethodInvokerImpl.invokeTargetMethod(ListenerMethodInvokerImpl.java:214) 
org.apache.tapestry.listener.ListenerMethodInvokerImpl.invokeListenerMethod(ListenerMethodInvokerImpl.java:155) 
org.apache.tapestry.listener.ListenerMethodInvokerImpl.searchAndInvoke(ListenerMethodInvokerImpl.java:124) 
org.apache.tapestry.listener.ListenerMethodInvokerImpl.invokeListenerMethod(ListenerMethodInvokerImpl.java:77) 
org.apache.tapestry.listener.SyntheticListener.actionTriggered(SyntheticListener.java:51) 
org.apache.tapestry.listener.ListenerInvokerTerminator.invokeListener(ListenerInvokerTerminator.java:51) 
$ListenerInvoker_112649beb7c.invokeListener($ListenerInvoker_112649beb7c.java) 
org.apache.tapestry.link.DirectLink.trigger(DirectLink.java:105) 
org.apache.tapestry.engine.DirectService.triggerComponent(DirectService.java:146) 
org.apache.tapestry.engine.DirectService.service(DirectService.java:132) 
$IEngineService_112649bebd5.service($IEngineService_112649bebd5.java) 
org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:66) 
org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:248) 
org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:60) 
$WebRequestServicer_112649bebb0.service($WebRequestServicer_112649bebb0.java)  


但是我的代码好像没有任何问题:
<table jwcid="@contrib:TableView"  align="center"  source="ognl:modaltest" pageSize="4" columns="id,threadTitle,devName" >

	<tr>
     <span jwcid="@contrib:TableColumns" />
    </tr>
   
   <tr jwcid="tableRows@contrib:TableRows"  class="ognl:beans.rowClass.next">
     <td align="left">
      <span jwcid="@Insert" value="ognl:components.tableRows.tableRow.id" />
     </td>
     <td align="right">
	   <a href="#" jwcid="@DirectLink" listener="listener:getThreadDetail" parameters="ognl:components.tableRows.tableRow.id">
       <span jwcid="@Insert" value="ognl:components.tableRows.tableRow.threadTitle" />
	   </a>
     </td>	 
	  <td align="center" >
	  
	  <img jwcid="@Image" width="110"  border="0" image="ognl:components.tableRows.tableRow.developer.imageAvatorAsset"/><br/>
      <span jwcid="@Insert" value="ognl:components.tableRows.tableRow.devName" />
	 
     </td>
   </tr>
        
  <tr>
    <td colspan="4" class="tablePages">
      <span jwcid="tablePages@contrib:TablePages"/>
    </td>
  </tr>
</table>


其中 source和columns都是赋了值的,否则第一页页不会正常显示的,有人遇到过这种问题么?
jimlaren 2007-05-07
Page类代码贴一下
moonfly2004 2007-05-08
应该是你点击分页后 形成的sql语句使  source="ognl:modaltest" 中 modaltest方法 返回的list 是null
lyo 2007-05-08
moonfly2004 写道
应该是你点击分页后 形成的sql语句使  source="ognl:modaltest" 中 modaltest方法 返回的list 是null

但是我把 tableview赋值后就不是由我负责了,因此是否返回null我是无法控制的,我使用的是一次性加载数据的方式.
lyo 2007-05-08
jimlaren 写道
Page类代码贴一下

	
<page-specification  class="lyo.test.tapestry.pages.Home">
   <property name="counter" persist="session" initial-value="0"/>
   
  <inject property="userService"
                            object="spring:userService"/>

			     <asset name="homeAsset" path="images/inspector-rollover.gif"/>
 <property name="imageAvatorAsset" />
 <bean name="rowClass" class="org.apache.tapestry.bean.EvenOdd"/>

  <component id="brotherAsset" type="Rollover">
    <binding name="image" value="asset:young"/>
    <binding name="mouseOver" value="asset:older"/>
  </component>
 			     <asset name="young" path="images/brother2.jpg"/>
			     <asset name="older" path="images/brother3.jpg"/>

</page-specification>
ylyqsm 2007-05-09
你可以重写表组件,再作保护!
lyo 2007-05-11
知道为什么了,需要把那个 testmodel声明成 persist="session",不知道为什么,难道页面上显示数据的组建都要是持久的?
Global site tag (gtag.js) - Google Analytics