0

ビュー スコープの Bean とセッション スコープの Bean を持つ JSF Web アプリケーションがあります。ビュー Bean からセッション Bean のメンバーを変更したいのですが、ある有名な JSF 担当者のこのガイドに従いましたが、実行時例外なしでは機能しないようです。マネージド セッション Bean への参照である「ホーム」は、参照時に null です。この質問と同様ですが、受け入れられた回答のアドバイスに従っていることを除きます。

package brian.canadaShipping;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

@ManagedBean(name= "requestBean")
@ViewScoped
public class CpstcRequestBean implements Serializable {

@ManagedProperty(value="#{home}")
private CpstcHomeBean homeBean;


public CpstcHomeBean getHomeBean() {
    return homeBean;
}


public void setHomeBean(CpstcHomeBean homeBean) {
    this.homeBean = homeBean;
}


private static final long serialVersionUID = -5066913533772933899L;

public String testVar = "hello world";
private boolean displayOutput = false;

public boolean isDisplayOutput() {
    return displayOutput;
}


public void setDisplayOutput(boolean displayOutput) {
    this.displayOutput = displayOutput;
}


public String getTestVar() {
    return testVar;
}


public void setTestVar(String testVar) {
    this.testVar = testVar;
}


public CpstcRequestBean()
{
    System.out.println("TEST: " + homeBean.toString());
    System.out.println("Hello, ResuestBean!");
}

}

私の「ホーム」Bean の最初のビットは次のとおりです。

@ManagedBean(name= "home")
@SessionScoped
public class CpstcHomeBean implements Serializable {
    ...

更新:私はヨルダンの提案に従いました。ビュー スコープの Bean には次のものがあります。

@ManagedBean(name= "requestBean")
@ViewScoped
public class CpstcRequestBean implements Serializable {

@Inject @Named("home") CpstcHomeBean homeBean;

public CpstcHomeBean getHomeBean() {
    return homeBean;
}


public void setHomeBean(CpstcHomeBean homeBean) {
    this.homeBean = homeBean;
}

public CpstcRequestBean()
{
    System.out.println("TEST: " + homeBean.toString());
    System.out.println("Hello, ResuestBean!");
}
...

これと同様に、セッションスコープの Bean で:

@Named("home")
@SessionScoped
public class CpstcHomeBean implements Serializable {
...

それでも、私の「ホーム」Bean 参照はまだ null です。何か案は?

更新 2:注入されたクラスだけでなく、両方のクラスで @Named を使用する必要があることが判明しました。Web アプリが読み込まれるようになりましたが、一部の要素が空白です。コンソール ログに、「ターゲットに到達できません。識別子 'home' が null に解決されました。」それが問題に影響する場合、私はTomcat 7で実行しています。何か案は?

4

1 に答える 1

0

セッション Bean の @ManagedBean を @Named に変更してから、それをビュー スコープ Bean に注入するか、次のようにセッション Bean を参照することができます。

FacesContext fc = FacesContext.getCurrentInstance()
private CpstcHomeBean homeBean = (CpstcHomeBean)  fc.getApplication().evaluateExpressionGet(fc, "#{home}", CpstcHomeBean.class);
于 2012-10-02T00:18:16.057 に答える