2011-06-19 6 views
1


viewscoped beanからビューパラメータにアクセスするにはどうすればよいですか?
私はほとんどこれと同じ内容のページを持っている:
Jsf2ビューのパラメータとビュースコープのBean

<f:metadata> 
    <f:viewParam name="name" value="#{goToUserpageRequest.name}" /> 
</f:metadata> 

<ui:define name="content"> 
    <h:outputText value="#{user.name}" styleClass="text"></h:outputText> 
    <h:outputText value="#{user.description}" styleClass="text"></h:outputText> 
</ui:define> 

GoToUserpageRequestは、私は、このページにリダイレクトするために使用するBeanですので、私は名前の値を送信することができます。
ユーザーはビュースコープのBeanです。 viewParam nameの値をuser.nameに渡したいと思います。どうやってやるの?
ありがとうございます!

答えて

1

contextexternal contextを使用してこの情報を入手できます。 request parametersを参照してください。

しかし、私はrequestスコープBeanを使用しようとし、injectビューとパラメータスコープの値をその中に入れようとします。そこからビューのスコープ付きオブジェクトを操作できます。このアプローチは単体テストが容易です。


編集:ここでは

が実装サンプルです:

<h:outputText value="#{nameUpdater.user.name}" /> 
+0

(私はMY_BEANと呼ばれますか)?私はリクエストでリダイレクトしているからです。 – bliof

+0

@bliof - リクエストスコープオブジェクト – McDowell

+0

でロジックを実行し、ビュースコープのオブジェクトを使用しないでください。そして、説明のexmpleに値を渡す方法は?それは少し長すぎる可能性があります.. – bliof

2
:要求を作成するために

@ManagedBean @RequestScoped 
public class NameUpdater { 
    @ManagedProperty("#{param.name}") private String name; 
    public String getName() { return name; } 
    public void setName(String name) { this.name = name; } 

    @ManagedProperty("#{user}") private User user; 
    public User getUser() { return user; } 
    public void setUser(User user) { this.user = user; } 

    @PostConstruct public void init() { 
     if(name != null) user.setName(name); 
    } 
} 

は、Beanスコープ、バインディング式は次のように変更します

解決策fを探しているうちに私がちょっと考えているあなたのケースの方が簡単ですまたは同じ状況。 ちょうど一緒にあなたのXHTMLでこれを使用する:

<f:metadata> 
    <f:viewParam name="name" value="#{goToUserpageRequest.name}" /> 
</f:metadata> 

<f:event type="preRenderView" listener="#{MY_BEAN.setName(goToUserpageRequest.name)}"/> 

はそう、あなたのリダイレクトビューのBeanにgoToUserpageRequest.name値を送り返すことができ、私はオブジェクトスコープビューを操作する必要がありますどこから

関連する問題