<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>
<property-class>java.util.List</property-class>
<list-entries/>
当初始化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>
分享到:
- 2008-03-29 13:25
- 浏览 2347
- 评论(2)
- 论坛回复 / 浏览 (0 / 2141)
- 查看更多
相关推荐
类集框架是Java 2的一大亮点,它标准化了处理对象集合的方式,解决了早期Java中如Dictionary、Vector、Stack和Properties等类各自为政的问题。Collection接口作为框架的基础,定义了通用的集合操作,如添加元素、...
Java的`util`工具类是Java标准库中的核心部分,为开发者提供了丰富的功能,极大地简化了编程工作。这个包包含了各种集合框架、日期时间处理、随机数生成、字符串操作、IO流处理等实用工具类。在Java编程中,熟练掌握...
这里提到的"Java API(分两次传,第一部分)"可能是指Java 1.6版本的API文档或库,这是一个重要的里程碑,因为它在Java的发展历程中占有显著位置。 Java API 主要分为几个部分: 1. **核心类库**:这是Java API的...
Java语言在设计时就考虑到了代码的复用性和可维护性,因此提供了许多内置的工具类,这些工具类分布在不同的包下,极大地丰富了Java的功能并简化了开发工作。本篇将详细介绍一些Java中常用的工具类及其应用。 一、`...
- 数据类型:Java有两大类数据类型,基本类型和引用类型。基本类型包括整型、浮点型、字符型和布尔型;引用类型则包括类、接口和数组。 - 内存管理:Java使用垃圾回收机制自动管理内存,程序员无需手动释放内存。 ...
这个过程可能会有一些效率问题,因为我们可能需要多次尝试才能找到一个未出现过的随机数。如果需要生成的随机数范围很大,这种策略可能会变得低效。这时,可以考虑使用`TreeSet`,它允许我们指定一个比较器来控制...
Java程序设计中的UTIL包是Java开发中非常关键的一部分,它包含了一系列通用的工具类和接口,为开发者提供了方便的功能,简化了代码编写。在本文档中,我们将深入探讨UTIL包的相关知识点,包括其设计背景、需求分析、...
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................
对于对象类型的数组,可以使用 `java.util.Collections.copy()` 方法。但需要注意的是,此方法只适用于列表(List),因此我们需要将数组转换为列表形式。 ```java List<Character> sourceList = Arrays.asList...
对于数组和列表的排序、搜索等功能,Java标准库提供了`java.util.Arrays`和`java.util.Collections`两个工具类。 ##### `Arrays`中的方法 - `void sort(T[])`: 对数组中的元素按照升序进行排序。 - `List asList...
9. **枚举**:Java 5引入的枚举类型是一种安全的常量集合,可以防止未定义的枚举值。 10. **集合转换**:Java 8引入的Stream API使得集合的转换和操作更为简洁,例如过滤、映射和归约操作。 这些Java常用类和概念...
- `import java.util.List;` - 这些导入语句是为了使用Java标准库中的`ArrayList`、`Collections`以及`List`接口。其中`ArrayList`用于存储开奖数字,`Collections`提供了一些静态方法对集合进行操作,如排序等。 ...
2. **数据类型**:Java分为两大类数据类型:基本数据类型(如int、char、float、double等)和引用数据类型(如类、接口、数组)。基本数据类型占据固定大小的内存,而引用数据类型则指向对象在内存中的位置。 3. **...
Java 中的数据类型分为简单数据类型和引用数据类型两大类: - **简单数据类型**:包括数值型 (`byte`, `short`, `int`, `long`, `float`, `double`)、字符型 (`char`) 和布尔型 (`boolean`)。 - **引用数据类型**:...
内存溢出问题可以从容器和程序类两个方面进行排查,容器问题可以调整容器参数来解决。 从程序类方面来说,内存溢出的原因有很多,以下是常见的几种: 1、查询数据库的时候递归循环了,应尽量使用精简的关联 SQL ...
Java提供了多种方法来实现这一功能,比如使用内置的`java.util.zip`包或者第三方库如Apache Commons Compress。同时,将文件或文件夹中的文件转换为Base64编码是一种在内存中传输和存储二进制数据的有效方式,特别是...