[英]JSF-ViewScope bean reinstantiated in every request
我已經在很多地方看到過描述此錯誤的原因,但總是有不同的原因。 像這樣的帖子指出,只有在頁面上包含標記處理程序庫時,才會發生重新實例化的問題。 但是,我有一個空項目,頁面如下所示
<?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>
像這樣的豆
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版本。
任何幫助將不勝感激。 謝謝!!
實際上,我發現實例保持不變。 問題是,當單擊按鈕時,我總是看到這樣的方法的toString中印有不同的hashCode。
constructing the instance
de.controller.Other@118ea91
de.controller.Other@1e8f930
de.controller.Other@1a38f3c
這使我認為存在不同的情況。
雖然是同一實例,但我認為這種行為是錯誤的,因為對象的hashCode不應在其生命周期內發生變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.