Tacos Tapestry 在做实时刷新表格时内存溢出问题
ylyqsm
2007-01-07
最近在做一个实现定时刷新表格的组件,
使用的是tacos的tapestry组件实现Ajax+Tapestry 我是用的是tacos的AjaxAutoInvoker定时(3秒)去触发AjaxEventSubmit动作,在AjaxEventSubmit动作中去不断更新table组件。 但是使用过程中的问题是,在我的环境(Eclipse3.2+MyEclipse5+Tomcat5.5+JDK1.5.0_10)中, 当刷新启动一段时间后,很快,Tomcat服务器就会出现内存溢出而挂掉,不知道是什么原因, 如果刷新时间设置得更短,挂得更快!!换过JDK版本和更换为Resin服务器都不行。 希望各位能指点,好让我早日走出迷途,为谢!!! 页面代码如下: <form jwcid="@AjaxForm"> <span jwcid="countryChangeEvent@tacos:AjaxEventSubmit" updateComponents="ognl:{'table'}" effects="template:{highlight:{any:'[255,255,184], 500, 500'}}" /> <span jwcid="@tacos:AjaxAutoInvoker" target="countryChangeEvent" intervalMilliseconds="3000"/> <table jwcid="table@tacos:Table" effects="template:{highlight:{any:'[255,255,184], 500, 500'}}" source="ognl:items" columns="country:Code:country, displayCountry:Name:displayCountry, displayLanguage:Language:displayLanguage"> </table> </form> |
|
tapestry
2007-01-07
方便把java代码帖出来么
|
|
ylyqsm
2007-01-07
代码很简单,就是一个getItems方法
public IBasicTableModel getItems() { return new IBasicTableModel() { public int getRowCount() { return Locale.getAvailableLocales().length; } public Iterator getCurrentPageRows(int nFirst, int nPageSize, ITableColumn objSortColumn, boolean bSortOrder) { int count = Locale.getAvailableLocales().length; int begInIndex = nFirst; int endIndex = nFirst + nPageSize -1; if (endIndex > count -1) { endIndex = count -1; } List<Locale> result = new ArrayList<Locale>(); for(int i = begInIndex; i<=endIndex; i++ ) { result.add(Locale.getAvailableLocales()[i]); } return result.iterator(); } }; } |
|
tapestry
2007-01-08
试试
public IBasicTableModel getItems() { return new IBasicTableModel() { public int getRowCount() { return Locale.getAvailableLocales().length; } public Iterator getCurrentPageRows(int nFirst, int nPageSize, ITableColumn objSortColumn, boolean bSortOrder) { Locale[] locales = Locale.getAvailableLocales(); int count = locales.length; int begInIndex = nFirst; int endIndex = nFirst + nPageSize -1; if (endIndex > count -1) { endIndex = count -1; } List<Locale> result = new ArrayList<Locale>(); for(int i = begInIndex; i<=endIndex; i++ ) { result.add(locales[i]); } return result.iterator(); } }; } |
|
ylyqsm
2007-01-08
tapestry,谢谢你的回复!! 问题已解决, 原来是因为我之前测试都是在Eclipse内启动web服务器测试的, 改单独启动服务器的方式就不会有这样的问题。 在Eclipse里,web服务器默认是依附在eclipse所在的进程上执行的(web服务器以进程内方式启动),单独运行服务器时,会单独启动进程来执行。 |
|
tapestry
2007-01-09
恩,我在eclipse里用jetty有时也出莫名其妙的问题,刷新一下就好了。
|