簡體   English   中英

在每個請求中都重新實例化了JSF-ViewScope bean

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM