0

別のBeanを管理プロパティとして持つBeanがあります:

public class Bean1
{   
    @ManagedProperty(value = "#{bean2}")
    private Bean2 bean2;

    ....
}

Bean2 は正しく作成されますが、bean1.xhtml から bean2.xhtml へのナビゲーションによって Bean2 の別のインスタンスが作成されるため、Bean1 から設定されたすべてのパラメーターが失われます。Bean1 と Bean2 は @ViewScoped です。

どこが間違っていますか?

4

1 に答える 1

0

Bean1.java

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.view.ViewScoped;

@ManagedBean
@ViewScoped
public class Bean1 {

    @ManagedProperty(value = "#{bean2}")
    private Bean2 bean2;

    @PostConstruct
    public void init() {
        System.out.println("in bean one....");
    }

    public Bean2 getBean2() {
        return bean2;
    }

    public void setBean2(Bean2 bean2) {
        this.bean2 = bean2;
    }

    public String changetoview() {
        return "bean2";
    }
}

Bean2.java

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.view.ViewScoped;

@ManagedBean
@ViewScoped
public class Bean2 {

    private String nameOfBean;

    public String getNameOfBean() {
        return nameOfBean;
    }

    public void setNameOfBean(String nameOfBean) {
        this.nameOfBean = nameOfBean;
    }

}

bean1.xhtml

<?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">
<h:head>
    <title>bean1</title>
</h:head>
<h:body>
    <h:form>
        <h:inputText value="#{bean1.bean2.nameOfBean}"></h:inputText>
        <h:commandButton action="#{bean1.changetoview}"
            value="Login"></h:commandButton>
    </h:form>
</h:body>
</html>

Bean2.xhmtl

<?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">
<h:head>
    <title>bean2</title>
</h:head>
<h:body>
    <h:form>dd
        <h:outputLabel value="#{bean2.nameOfBean}"></h:outputLabel>
    </h:form>
</h:body>
</html>

それは私の最後で働いています、私もに変更しても働いてい@ViewScopeます@SessionScope。さらに情報が必要な場合は、コードに関する詳細情報で質問を書き直してください。ありがとう

于 2016-06-28T11:28:25.317 に答える