Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/authentication/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 JSF ViewScope bean不正确的哈希代码实现?_Jsf 2 - Fatal编程技术网

Jsf 2 JSF ViewScope bean不正确的哈希代码实现?

Jsf 2 JSF ViewScope bean不正确的哈希代码实现?,jsf-2,Jsf 2,我正在JSF上开发一个简单的应用程序,具有以下依赖性 <dependency> <groupId>org.apache.myfaces.core</groupId> <artifactId>myfaces-impl</artifactId> <version>2.0.2</version> </dependency> <dependenc

我正在JSF上开发一个简单的应用程序,具有以下依赖性

    <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>
如果我根据toString源代码多次单击commandButton,它应该会写

class name+hashCode
但它写的东西如下

de.controller.Other@118ea91
de.controller.Other@1e8f930
de.controller.Other@1a38f3c
因此,每次我们单击viewscoped bean时,都会有一个不同的哈希代码。这是不对的吗?我尝试过会话bean,但这没有发生

编辑

我按照建议用下面的方法修改了课堂

import java.io.Serializable;

import javax.annotation.PostConstruct;
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;

    @PostConstruct
    public void init()
    {
         System.out.println("Post Construction");
    }

    public Other()
    {
         System.out.println("Constructor");
    }

    public void doSome() {
        System.out.println(this);
    }
}
我在点击多次后发现了这个输出

Constructor
Post Construction
de.controller.Other@b748dd
de.controller.Other@1620dca
de.controller.Other@116358
de.controller.Other@73cb2d
de.controller.Other@1cc3ba0

因此,构造函数和后构造函数方法只被调用一次,尽管如此,对象在每次调用中仍然有不同的哈希代码。这很奇怪,因为不带参数的构造函数应该在托管bean实例化上被调用,但事实并非如此,所以我仍然不明白如何多次创建对象?

当您从操作方法返回non-
null
时,会创建一个新视图

如果要保持当前视图的活动状态,只需从action方法返回
null
void

例如

另见:


也就是说,您认为这是一个问题的结论是正确的,但是您基于您的结论“不正确的hashcode实现”的理由毫无意义。每次都是物理上不同的bean实例。在类中添加一个默认构造函数,在其上放置一个断点,您将看到每次从action方法返回后都会调用它,创建一个全新的实例。

使用更新版本的myfaces core。最新版本(2.0.20、2.1.14)被认为是最稳定的。这看起来像是史前时代解决的一个古老问题。我根据你的建议做了一个编辑。谢谢
import java.io.Serializable;

import javax.annotation.PostConstruct;
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;

    @PostConstruct
    public void init()
    {
         System.out.println("Post Construction");
    }

    public Other()
    {
         System.out.println("Constructor");
    }

    public void doSome() {
        System.out.println(this);
    }
}
Constructor
Post Construction
de.controller.Other@b748dd
de.controller.Other@1620dca
de.controller.Other@116358
de.controller.Other@73cb2d
de.controller.Other@1cc3ba0
public void doSome() {
    System.out.println(this);
}