我先简单描述下问题.我下了一个backbean.并在faces-config.xml中配置好了.在JSF页面取得该bean中的list的时候为什么会创建多个list对象...
代码如下:
UserVO.javapublic class UserVO {
private int id;
private String typename; public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTypename() {
return typename;
}
public void setTypename(String typename) {
this.typename = typename;
}
}TestBackBean.javapublic class TestBackBean{ private List movDic;
public List getMovDic() {
System.out.println("eee"); List test = new ArrayList();
UserVO mv1 = new UserVO();
mv1.setId(1);
mv1.setTypename("wori");
test.add(mv1); return test;
}
}faces-config.xml
.....
<managed-bean>
<managed-bean-name>dic</managed-bean-name>
<managed-bean-class>
com.test.TestBackBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
......test.jsf
.....
<table>
<c:forEach items="#{dic.movDic}" var="item">
<tr>
<td>
#{item.typeno}
</td>
<td>
#{item.typename}
</td>
</tr>
</c:forEach>
</table>
....
问题出现了!!!! 系统打印出来的信息"eee" 出现了多次!!!也就是说调用get方法调用了多次.我想不明白是怎么回事.
按道理只应该返回唯一的一个list啊.望高手指点,谢谢了...
代码如下:
UserVO.javapublic class UserVO {
private int id;
private String typename; public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTypename() {
return typename;
}
public void setTypename(String typename) {
this.typename = typename;
}
}TestBackBean.javapublic class TestBackBean{ private List movDic;
public List getMovDic() {
System.out.println("eee"); List test = new ArrayList();
UserVO mv1 = new UserVO();
mv1.setId(1);
mv1.setTypename("wori");
test.add(mv1); return test;
}
}faces-config.xml
.....
<managed-bean>
<managed-bean-name>dic</managed-bean-name>
<managed-bean-class>
com.test.TestBackBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
......test.jsf
.....
<table>
<c:forEach items="#{dic.movDic}" var="item">
<tr>
<td>
#{item.typeno}
</td>
<td>
#{item.typename}
</td>
</tr>
</c:forEach>
</table>
....
问题出现了!!!! 系统打印出来的信息"eee" 出现了多次!!!也就是说调用get方法调用了多次.我想不明白是怎么回事.
按道理只应该返回唯一的一个list啊.望高手指点,谢谢了...
解决方案 »
- ssh整合问题 在线等待急
- java如何解析xml文件?给个简单的例子!急!
- JXL读excel中的符号×乱码怎么决绝
- requestscope.msg问题
- 新手提问。
- 告诉大家一个快捷收藏和浏览自己喜爱网址的方法
- 一个固定ip怎么连接到我的服务器?
- weblogic中如何实现用户在网页上没有任何操作时超出一个时间就自动退出
- 怎么利用jsp或servlet,把服务端上的某个word文档或R14文件下载到客户端指定的目录中?
- No getter method for property xxx of bean 前辈快来帮我
- 请问在Dreamweaver中怎样用它自带的自定义连接字符串连mysql数据库。
- struts中的一个标签问题?
由于数据最终是从数据库去取的,如果多次调用get的话,将是很可怕的事情.望高手帮帮小弟...第一次用JSF做项目.
====?
是从哪里来的?
但问题不在这里.由于VO的东西比较多,VO我是改了发上来的.由于项目要求对表格操作比较复杂,用JSF的dataTable没有办法处理.所以想用JSTL来生成表格,这样就能灵活控制了.但没想到却出现这个问题...救命啊.555
目前的代码看不出来什么.
TestBackBean.javapublic class TestBackBean{private List movDic;
public List getMovDic() {
if(null==movDic){
System.out.println("eee");List test = new ArrayList();
UserVO mv1 = new UserVO();
mv1.setId(1);
mv1.setTypename("wori");
test.add(mv1);
movDic=test;
}
return movDic;
}
}
最好增加setMovDic方法
出现错误我猜是这样的,你的getMovDic()方法并不是返回movDic这个List
而是new了一个ArrayList 并且在这过程中 System.out.println("eee");
也就是说,只要调用一次这个getMovDic()方法就打印一次eee那你再看看你的jsp文件 在执行foreach这一行时执行了一次getMovDic()方法来获得一个List;
然后在#{item.typeno}和#{item.typeName}的时候里获得item时,jstl内部的方法是不是又调用了2次getMovDic()方法呢?另外要说的一点相当重要:由于你的get方法里 每次都是List test = new ArrayList();
就产生一个新的引用 即使其值和原来的movDic是一样的,但是引用不同,也就是说你每次get方法调用得到的movDic的List都是一个不同的对象,不知道我这样说你明白了吗??希望对你解决问题有帮助。建议你这样写get方法:
public List getMovDic() {
movDic.removeAll();UserVO mv1 = new UserVO();
mv1.setId(1);
mv1.setTypename("wori");movDic.add(mv1);
return movDic;
}