2011-02-02 10 views
2

私はデータテーブルを持つページを持っています。テーブルの項目の一部を対応するビューページにリンクする必要があります。JSF LINK to View Page

<h:dataTable var="bean" value="#{beanServiceImpl.beans}" border="1"> 
    <h:column>#{bean.id}</h:column> 
    </h:dataTable> 

は、私はいくつかのエントリへのハイパーリンクを追加すると、彼らのIDに基づいて、それらをより多くの情報を示す図ページに移動があります:

は例えば、今の私はありませんリンクを持つテーブルが

<h:dataTable var="bean" value="#{beanServiceImpl.beans}" border="1"> 
    <h:column> 
     <a href="viewBean.xhtml?id=#{bean.id}">#{bean.id}</a> 
    </h:column> 
    </h:dataTable> 

ViewBean.xhtmlは、次のようなものが含まれます:

ViewBean.xhtml

<ul> 
    <li>ID: #{bean.id}</li> 
    <li>Field 1: #{bean.field1}</li> 
    <li>Field 2: #{bean.field2}</li> 
</ul> 

JSFでこれをどうすれば達成できますか?私は他のフィールドのidを問い合わせるコントローラを記述しなければならないことを知っています。しかし、他のフィールドを取得してレンダリングするために、viewBean.xhtmlでビジネスロジックを実行させるにはどうすればよいですか?

答えて

5

はBalusCの答えはほとんど良いですが、機能しません(編集:それが機能するようになりました)。

あなたは既に知っています、どのように値をパラメータに追加するか。ところで、私があなただったら、私は<a href>を使用することはありませんが、代わりに:

<h:link outcome='viewBean'> 
    <f:param name='id' value='#{bean.id}' /> 
</h:link> 

今では値を引くことになると、あなたは選択肢にあります。最も簡単なのは、あなたのidプロパティの上に注釈を追加することです:

@ManagedProperty("#{param.id}") // this will inject id from param into id 
private Long id; 


// (getters and setters are obligatory) 


@PostConstruct // this will execute init() after id is injected 
public void init() { 

} 

そして最後のもの:「豆」という名前の変数はもう「変数」それを呼び出す(または犬という名前の犬を持つよりも感覚や猫を持っていないましたCatと名付けられた)。それは情報を持っておらず、悪いことに、それはあなたのアプリケーション内のすべての豆を区別できないようにします(あなたが豆腐マネジャーを構築しない限り)。

+0

あなたの答えをありがとう。 +1 "Bean"という名前の変数については、より一般的にするために名前を変更したので、例として投稿することができます(field1とfield2も一般的です)。私はまったく新しいので、私はこれが公共のフォーラムでプログラミングの質問をするときに適切だと思います。ありがとう。 – Steve

2

JSF 2.xと仮定します。

それはBean@PostConstruct方法で利用可能になるだろう(これは基本的にビュー負荷がいつでもbean.setId(request.getParameter("id"))ん)あなたのBean

@ManagedProperty(value="#{param.id}") 
private Long id; 

にこれを追加します。

@PostConstruct 
public void init() { 
    // Fill model based on id. 
} 
+0

オム。その答えは間違っています。ビューのパラメータは標準面のライフサイクルの一部なので、@PostConstructが呼び出されたときにリクエストの値は使用できません。モデル値が更新されるまで待つ必要があります。 – fdreger

+0

@fdreger:fixed。 – BalusC

+0

こんにちはBalusC、あなたの答えをありがとう。以下に私の解決策を掲載しました。 – Steve

2

これは私がやったことです。私Bean.javaクラスで

<h:form> 
     <h:commandLink action="#{bean.populateBean}" value="#{bean.id}"> 
      <f:setPropertyActionListener target="#{bean.id}" value="#{bean.id}" /> 
     </h:commandLink> 
    </h:form> 

、私はアクションコントローラを追加しました:

public String populateBean(){ 
    Bean bean = BeanServiceImpl.getBean(id); //id was injected by the commandLink 
    this.field1 = tenure.getField1(); 
    this.field2 = tenure.getField2(); 

    return("viewBean"); 
} 

私ViewBean.xhtmlは同じです。

<ul> 
    <li>ID: #{bean.id}</li> 
    <li>Field 1: #{bean.field1}</li> 
    <li>Field 2: #{bean.field2}</li> 
</ul> 
関連する問題