这个问题昨晚发过一个帖子,起初以为是service或者action里的错误,没有从数据库取到值。
后来经论坛里朋友指点,用size()发现可以获得service里的取值...然后怀疑是往request里放出来问题。今早起来把练习demo从新做一遍,同样问题,但是发现是前台输出的问题了,下面跟code: public String execute() throws Exception{
Map request = (Map)ActionContext.getContext().get("request");
request.put("list", this.service.findAllUser());
System.out.println("检验数据:"+this.service.findAllUser().size());
System.out.println("检验数据:"+request.size());
return SUCCESS;控制台结果是:检验数据:4
检验数据:2于是又在jsp检验:验证数据是否已传送到jsp页面:
<s:property value="#request.list.get(3).userName"/>
<s:property value="#request.list.get(3).userPassword"/>
<hr>
<table border="1">
<tr>
<td>
ID:
</td>
<td>Name:</td>
<td>Password:</td>
</tr>
<s:iterator value="#request.list" id="us">
<tr>
<td>
<s:property value="#us.userId"/>
<br></td>
<td>
<s:property value="#us.userName"/>
<br></td>
<td>
<s:property value="#us.userPassword"/>
</td>
</tr>
</s:iterator>
</table>结果是(就不上图了,直接拉内容,其中‘空’是页面上出了表格框架但是内容为空的):验证数据是否已传送到jsp页面: travis 123
--------------------------------------------------------------------------------
ID: Name: Password: 空 空 空
空 空 空
空 空 空
空 空 空
由此可见用iterator迭代此集合时是可以知道集合内有4个迭代对象,并以此压到栈顶做输出了。
但是输出值为空,说明:<s:property value="#us.userName"/> 此句有错误。可是我不认为此句有错误诶...
求指点,在线等...
后来经论坛里朋友指点,用size()发现可以获得service里的取值...然后怀疑是往request里放出来问题。今早起来把练习demo从新做一遍,同样问题,但是发现是前台输出的问题了,下面跟code: public String execute() throws Exception{
Map request = (Map)ActionContext.getContext().get("request");
request.put("list", this.service.findAllUser());
System.out.println("检验数据:"+this.service.findAllUser().size());
System.out.println("检验数据:"+request.size());
return SUCCESS;控制台结果是:检验数据:4
检验数据:2于是又在jsp检验:验证数据是否已传送到jsp页面:
<s:property value="#request.list.get(3).userName"/>
<s:property value="#request.list.get(3).userPassword"/>
<hr>
<table border="1">
<tr>
<td>
ID:
</td>
<td>Name:</td>
<td>Password:</td>
</tr>
<s:iterator value="#request.list" id="us">
<tr>
<td>
<s:property value="#us.userId"/>
<br></td>
<td>
<s:property value="#us.userName"/>
<br></td>
<td>
<s:property value="#us.userPassword"/>
</td>
</tr>
</s:iterator>
</table>结果是(就不上图了,直接拉内容,其中‘空’是页面上出了表格框架但是内容为空的):验证数据是否已传送到jsp页面: travis 123
--------------------------------------------------------------------------------
ID: Name: Password: 空 空 空
空 空 空
空 空 空
空 空 空
由此可见用iterator迭代此集合时是可以知道集合内有4个迭代对象,并以此压到栈顶做输出了。
但是输出值为空,说明:<s:property value="#us.userName"/> 此句有错误。可是我不认为此句有错误诶...
求指点,在线等...
解决方案 »
- tomcat下和 metadata\.plugins\org.eclipse.wst.serve.core\temp1下server.xml区别?
- applicationContext.xml 里使用aop命名空间出错
- 关于JAVA MAIL发送问题
- 有关内存数据库以及大数据量操作的问题
- 寻网站模版 急急急急急急
- 请问如何在struts的bean:write中 截取输出字符??
- Tomcat连接数据源问题!急求解!
- 有哪位朋友能看明白下面的错误信息的?(关键字:linux,weblogic,ejb,bea-010054)
- 初学java应从哪里学起?各位大虾请指教
- java&xml
- 【急】文件读取问题
- jsp中包含一个servlet如何写路径?
List list = this.service.findAllUser()
System.out.println("检验数据:"+this.service.findAllUser().size());
System.out.println("检验数据:"+request.size());
return SUCCESS;
}private List list;public List getList(){return list;
}public void setList(List list){
this.list = list;
} <s:iterator value="list" >
//..........
</s:iterator>
<s:property value="#request.list.get(3).userName"/>
<s:property value="#request.list.get(3).userPassword"/>
<hr>
<table border="1">
<tr>
<td>
当前迭代是否有对象:
</td>
<td>
ID:
</td>
<td>Name:</td>
<td>Password:</td>
<td>count:</td>
</tr> <s:iterator value="#request.list" id="us">
<tr>
<td>
<s:property/>
<br>
</td>
<td>
<s:property value="#us.userId" />
<br>
</td>
<td>
<s:property value="#us.userName" />
<br>
</td>
<td>
<s:property value="#us.userPassword" />
</td>
<td>
<s:property value="#us.count" />
</td>
</tr>
</s:iterator>
</table>
输出是:
验证数据是否已传送到jsp页面: travis 123
--------------------------------------------------------------------------------
当前迭代是否有对象: ID: Name: Password: count:
com.travis.hibernate.User@1584be7 空 空 空 空
com.travis.hibernate.User@1df3082 空 空 空 空
com.travis.hibernate.User@1e9d0cc 空 空 空 空
com.travis.hibernate.User@18b0b4a 空 空 空 空
看来还是<s:property value="#us.userName" />无法输出,跟别的无关。
而且调用iterator内部方法也无法输出<s:property value="#us.count" />,根本不输出当前迭代元素的总数..这是为什么?
<s:property value="#request.list.get(3).userName"/>
<s:property value="#request.list.get(3).userPassword"/>
<hr>
<table border="1">
<tr>
<td>
当前迭代是否有对象:
</td>
<td>
ID:
</td>
<td>Name:</td>
<td>Password:</td>
<td>count:</td>
</tr> <s:iterator value="#request.list" status="sys">
<tr>
<td>
<s:property/>
<br>
</td>
<td>
<s:property value="userId" />
<br>
</td>
<td>
<s:property value="userName" />
<br>
</td>
<td>
<s:property value="userPassword" />
</td>
<td>
<s:property value="#sys.count" />
</td>
</tr>
</s:iterator>
</table>
输出就是:
验证数据是否已传送到jsp页面: travis 123
--------------------------------------------------------------------------------
当前迭代是否有对象: ID: Name: Password: count:
com.travis.hibernate.User@98f9c2 4 aaaa 123 1
com.travis.hibernate.User@135707c 3 cicada 123 2
com.travis.hibernate.User@16c14e7 2 slog 123 3
com.travis.hibernate.User@d0726d 1 travis 123 4
搞忘记,iteretor是把迭代集合的每一个对象压入值栈顶层,值栈也就是root吧,可以直接取用,不需要用ognl表达式的来取,直接用POJO内的属性即可。
当第一个迭代对象取完之后会删除,然后压入第二个几何元素到值栈顶层,以此继续..
因为count是iterator内部方法,并不会被压入值栈,属于依附在值栈root旁边(至于哪就不知道了,没学好,这还是临时查struts2深入详解手册来的),所以需要#取。
希望对都来这有帮助。
同时谢谢楼上各位热情的好人们~!
<s:property value="userName" />
</s:iterator>
直接这样就可以的!