1

この投稿では、動的ui:includeで、同じブラウザーの新しいウィンドウまたはタブをロードできる状態でオブジェクトを保存する方法を尋ねましたが、新しいウィンドウにも保存されませんでした。Adrian Mitevは@WindowScoped、CODIと呼ばれるMyFaces拡張機能のオプションを使用するように私に言ったので、それを実装しようとしました。

今、私は盲目であり、Apache Wikiを開こうとすると、ブラウザが多くのページでクラッシュするため、ガイドを読むことができません。

ただし、プロジェクトにソースコードを追加しましたが、コンパイラはエラーを出しませんでした。問題は、保存したBeanを取得しようとしたときにページが@WindowScoped正しく機能しないことです。

私は自分のBeanでこのコードを使用しています:

@ManagedBean (name="logicBean" )
@WindowScoped

私はこのinclude.xhtmlコードでパラメータを取得します:

<ui:include src="#{logicBean.pageIncluded}"/> 

そして、他のBeanでは、このコードを使用してを取得しLogicBeanます(そして、問題はこのコードにあると確信しています)

LogicBean l = (LogicBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("logicBean");

「正しい」LogicBeanオブジェクトを取得するにはどうすればよいですか?

4

1 に答える 1

2

LoginBeanセッションマップから取得しようとしています。@SessionScopedこれは、標準の JSFアノテーションを持つセッション スコープの Bean に対してのみ機能します。

他の Bean にアクセスする標準的な方法は@ManagedProperty、取得する Bean で使用することです。

例えば

@ManagedBean
@RequestScoped
public class OtherBean {

    @ManagedProperty("#{logicBean}")
    private LogicBean logicBean;

    // Getter+Setter.
}

ELをプログラムで評価してメソッドブロック内で本当にアクセスする必要がある場合は、Application#evaluateExpressionGet()代わりに次を使用する必要があります。

FacesContext context = FacesContext.getCurrentInstance();
LogicBean logicBean = context.getApplication().evaluateExpressionGet(context, "#{logicBean}", LogicBean.class);
// ...
于 2012-01-18T14:47:52.980 に答える