浏览 402 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-03-29
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
先看一下test.jsf页面
<h:datatable value="#{TestAction.arr}" var="test">
<h:column>
<h:outputText value="#{test}"/>
</h:column>
</h:datatable>
实习一个简单的功能,把TestAction的arr属性(java.util.List类型)的值打印成表格。
再来看看TestAction.java public class TestAction {
private static Logger log = Logger.getLogger(TestAction.class);
private List<String> arr;
public List<String> getArr() {
log.info("[Method]getArr()...");
if (arr==null){
arr=new ArrayList<String>();
}
arr.add("Hello");
arr.add("World");
return arr;
}
public void setArr(List<String> arr) {
this.arr = arr;
}
}getArr()方法返回一个元素是字符串的List;
在用MyEclipse在faces-config.xml配置这个Action <managed-bean>
<managed-bean-name>TestAction</managed-bean-name>
<managed-bean-class>
com.bookstore.admin.actions.TestAction
</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>arr</property-name>
<property-class>java.util.List</property-class>
<list-entries/>
</managed-property>
</managed-bean>访问test.jsf,后台输出了 [Method]getArr()... [Method]getArr()...
getArr()方法执行了两次!上Google寻找答案,有的说是web.xml里不能写 <context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
因为默认情况下,JSF会从/WEB-INF/faces-config.xml里加载jsf的配置文件,如果在web.xml里面写,还会再次加载。这个配置也是MyEclipse自动写进去的。俺就满怀希望的把这个配置项删掉。但是结果问题还是没有解决。getArr()方法还是被调用两次。 最后,通过比较faces-config.xml里不同的bean之间配置,总算找到了原因。 问题就出在属性arr的值被设置成了<list-entries/> <property-name>arr</property-name> 当初始化TestAction时,就调用了一次getArr();在解析jsf页面上的#{TestAction.arr}时,又调用了一次getArr()。因此造成了调用两次。
找到了原因,解决起来就简单了。把arr的值设置成null就行了。 <managed-property> <property-name>arr</property-name> <property-class>java.util.List</property-class> <null-value></null-value> </managed-property>
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |


