论坛首页 Java企业应用论坛

Tapestry 中的ognl表达式出错,这种List结构应该怎麽取?

浏览 6441 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-07-07  
大家好:

  我在后台用Spring取得一个List,想在Tapestry页面上使用ognl表达式显示出来,但是总报错, ognl:NoSuchPropertyException,我取List得代码:
public List getArticleList(); {
        return this
                .getHibernateTemplate();
                .find(
                        "from Article a,Author au where au.id=a.author.id and a.artArticle.id is  null");;
    }

经过测试已经得到这个List了:
Get list>>>>>>>>>>>>>> : [[Ljava.lang.Object;@1557c0, [Ljava.lang.Object;@1342a67, [Ljava.lang.Object;@1cbda0a, [Ljava.lang.Object;@57ea52, [Ljava.lang.Object;@1d8d39f, [Ljava.lang.Object;@2d95b3, [Ljava.lang.Object;@bf5555]

在Main.java tapestry代码中:
public void pageBeginRender(PageEvent arg0); {
		// TODO Auto-generated method stub
		List list=this.getArticleDao();.getArticleList();;
		this.setArticles(list);;
	}

页面上:
<span jwcid="@Foreach" source="ognl:articles" value="ognl:currentVar">
<TR>
	<TD><span jwcid="@Insert" value="ognl:currentVar[0].articleTitle">test</span></TD>
	<TD><span jwcid="@Insert" value="ognl:currentVar[1].authorName">test</span></TD>
	<TD><span jwcid="@Insert" value="ognl:currentVar[0].articleViewTime">test</span></TD>
	<TD><span jwcid="@Insert" value="ognl:currentVar[0].articlePostTime">test</span></TD>
</TR>
</span>

应该是页面上取得数据时候出的错误
完整Exception:
An exception has occurred. 
You may continue by restarting the session. 

org.apache.tapestry.BindingException 
Unable to update expression 'currentVar' for lyo.test.tapestry.Main$Enhance_5@26efd3[main] to [Ljava.lang.Object;@4b35ef. 
binding: ExpressionBinding[main currentVar] 
location: context:/test/main.html, line 20 
   
ognl.NoSuchPropertyException 
currentVar 
target: lyo.test.tapestry.Main$Enhance_5@26efd3[main] 
Stack Trace: 
ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:133); 
ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1459); 
ognl.ASTProperty.setValueBody(ASTProperty.java:105); 
ognl.SimpleNode.setValue(SimpleNode.java:239); 
ognl.Ognl.setValue(Ognl.java:478); 
org.apache.tapestry.binding.ExpressionBinding.setObject(ExpressionBinding.java:553); 
org.apache.tapestry.components.Foreach.renderComponent(Foreach.java:114); 
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); 
org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:371); 
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); 
org.apache.tapestry.ApplicationServlet.doPost(ApplicationServlet.java:326); 
javax.servlet.http.HttpServlet.service(HttpServlet.java:709); 
javax.servlet.http.HttpServlet.service(HttpServlet.java:802); 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237); 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157); 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214); 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); 
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198); 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152); 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137); 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118); 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102); 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109); 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929); 
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160); 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799); 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705); 
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577); 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683); 
java.lang.Thread.run(Thread.java:534);  


应该怎样取呢请指点! 多谢
   发表时间:2005-07-07  
引用

&lt;span jwcid="@Foreach" source="ognl:articles" value="ognl:currentVar"&gt;
&lt;TR&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar[0].articleTitle"&gt;test&lt;/span&gt;&lt;/TD&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar[1].authorName"&gt;test&lt;/span&gt;&lt;/TD&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar[0].articleViewTime"&gt;test&lt;/span&gt;&lt;/TD&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar[0].articlePostTime"&gt;test&lt;/span&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/span&gt;

你要添加一个属性,好像是什么index的,具体可以看tapestry的foreach的文档,将上面的[0]换成index值。

告诉你没有currentVal熟悉是你没有在.page里加入currentVal的属性申明
0 请登录后投票
   发表时间:2005-07-08  
dohkoos 写道
引用

&lt;span jwcid="@Foreach" source="ognl:articles" value="ognl:currentVar"&gt;
&lt;TR&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar[0].articleTitle"&gt;test&lt;/span&gt;&lt;/TD&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar[1].authorName"&gt;test&lt;/span&gt;&lt;/TD&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar[0].articleViewTime"&gt;test&lt;/span&gt;&lt;/TD&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar[0].articlePostTime"&gt;test&lt;/span&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/span&gt;

你要添加一个属性,好像是什么index的,具体可以看tapestry的foreach的文档,将上面的[0]换成index值。

告诉你没有currentVal熟悉是你没有在.page里加入currentVal的属性申明


应该这么写,tapestry的例子很多,你要先熟悉一些例子。
&lt;span jwcid="@Foreach" source="ognl:articles" value="ognl:currentVar"&gt;
&lt;TR&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar.articleTitle"&gt;test&lt;/span&gt;&lt;/TD&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar.authorName"&gt;test&lt;/span&gt;&lt;/TD&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar.articleViewTime"&gt;test&lt;/span&gt;&lt;/TD&gt;
        &lt;TD&gt;&lt;span jwcid="@Insert" value="ognl:currentVar.articlePostTime"&gt;test&lt;/span&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/span&gt;
0 请登录后投票
   发表时间:2005-07-08  
说错了,应该是像rwx写的那样
0 请登录后投票
   发表时间:2005-07-08  
*.page也帖一下.

楼上的看一下他的HQL了.
0 请登录后投票
   发表时间:2005-07-08  
不是,应该把currentVar在page里声明为Article[]类型.
0 请登录后投票
   发表时间:2005-07-10  
你的这个语句
"from Article a,Author au where au.id=a.author.id and a.artArticle.id is  null"
取出来的是个数组,里边包含选出来的article和author,
Iterator iter = list.iterator();
while(iter.hasNext()){
Object[] results = (Object[])iter.next();
Article article  = results[0];
Author author  = results[1];
}

所以你的list中的元素是个数组,所以应该确认一下是否将currentVar声称为Object的数组。
0 请登录后投票
   发表时间:2005-07-12  
既然不是循环

我觉得你直接写get几个方法好了

变通一下
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics