我已经看到很多地方描述过这个错误但总是原因不同。像this这样的帖子指出,当您在页面上包含标记处理程序库时,只会发生重新实例化的问题。但是,我有一个空项目,其中包含如下页面
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<head>
<title></title>
</head>
<body >
<h:form>
<f:view >
<h:commandButton id="otxMainPanelTextBt" value="click"
action="#{otherController.doSome}"/>
</f:view>
</h:form>
</body>
</html>
使用像这样的支持bean
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean(name = "otherController")
@ViewScoped
public class Other implements Serializable {
private static final long serialVersionUID = -6493758917750576706L;
public String doSome() {
System.out.println(this);
return "";
}
}
以下依赖
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>2.0.2</version>
</dependency>
每次点击按钮时都会创建一个不同的对象。显然这个页面尽可能简单,我没有触发任何可能的错误原因,所以它总是发生或者我错过了什么?
我测试过将依赖项更改为2.2.0并且按预期工作但不幸的是由于项目限制,我需要保留JSF的2.0.2版本。
任何帮助都将受到高度赞赏。 谢谢!
答案 0 :(得分:0)
实际上,我发现实例保持不变。问题是当点击按钮时,我总是看到在方法的toString中打印出不同的hashCodes。
constructing the instance
de.controller.Other@118ea91
de.controller.Other@1e8f930
de.controller.Other@1a38f3c
这让我觉得有不同的例子。
虽然是同一个实例,但我认为这种行为是不正确的,因为对象的hashCode在其生命周期内不应该改变。