2012-04-29 7 views
1

私はクラスcounterBeanを持っていて、私は2つの別個のカウンタのために私のJSPでcounterBeanの2つのインスタンスをインスタンス化したいと思います。どうすればいい?Java beanは同じjsp内の複数のインスタンス

EDIT - コードを追加

package beans; 

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 

@ManagedBean(name="CounterBean") 
@SessionScoped 
public class CounterBean implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 
    private static int hitCount; 

    public CounterBean() 
    { 
     CounterBean.hitCount = 0; 
    } 

    public static int getCounter() 
    { 
     hitCount++; 
     return hitCount; 
    } 

    public static void setCounter(int hitCount) 
    { 
     CounterBean.hitCount = hitCount; 
    } 

    public static int getValue() 
    { 
     return hitCount; 
    } 
} 
+0

私が考えることができる唯一のことは、2つの異なるカウンタークラスを作成することですが、それは多すぎるようです。 – omegaFlame

+0

あなたは '[jsf-2.0]'という質問にタグを付けました。廃止予定のJSPビュー技術を使用していますか?なぜ後継者Faceletsはありませんか? (これはXMLベースです)。 – BalusC

+0

純粋に教育的なことですが、先ほどお話したように、より良い方法があることを認識しています。私はチュートリアルに従っているので、jspでそれを行う方法を知りたいだけです。 – omegaFlame

答えて

1

JSPのコード内で直接オブジェクトを作成しない方がよいです。 JSPはビューのみである必要があるためです。 JSPページでのスクリプトレットの使用は良い方法ではありません。 それは<jsp:useBean>タグ使用することをお勧めします:

<jsp:useBean id="firstCounterId' class="yourpackagename.CounterBean" /> 
<jsp:useBean id="secondCounterId' class="yourpackagename.CounterBean" /> 

を、タグ<jsp:set Property>

<jsp:setProperty name="firstCounterId" property="myNumber" value="123"/> 

を適用する特定のカウンタの値を変更するにはしかし、私はから豆を変更し、使用しているほぼすべての問題だと思いますJSPをタグの使用によって解決することができます<c:set><c:out>

+0

私はクラスのgetCounter()メソッドを使用してカウンタをインクリメントしようとしています。どのように私は上記の方法を使用してこれを行うだろうか? – omegaFlame

+0

このようにして、カウンタの値を変更するには、 ''を使用できます。現在の値を取得する場合は、タグ 'を使用します。 'number'はcounterBeanのプロパティです。より詳細な回答については、私はあなたのコードを見なければなりません。 – kapand

+0

この回答に基づいて@Andrey Kapelchik – omegaFlame

-1

はいかが

CounterBean cb1 = new CounterBean(); 
CounterBean cb2 = new CounterBean(); 
+0

これはJSFには適していません –

0

通常行うようにカウンタBeanを作成します。

@Named(value="counterBean") 
@SessionScoped 
public class CounterBeanClass implements Serializable { 

    private int counter = 0; 

    public CounterBeanClass() { 
    } 

    public int getCounter() { 
     return counter; 
    } 

    public void setCounter(int counter) { 
     this.counter = counter; 
    } 

    public String addCounterValue() { 
     this.counter++; 
     return ""; 
    } 
} 

次に、作成したり、今あなたが分離豆のように両方のカウンタを呼び出すことができ、あなたのfaces-config.xmlファイル

<managed-bean> 
    <managed-bean-name>anotherCounterBean</managed-bean-name> 
    <managed-bean-class>my.backingbean.CounterBeanClass</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

に新しい管理Beanを追加します。

<h:form> 
    <h:panelGrid columns="2"> 
     <h:outputText value="Counter 1" /> 
     <h:outputText value="#{counterBean.counter}" /> 
     <h:outputText value="Counter 2" /> 
     <h:outputText value="#{anotherCounterBean.counter}" /> 
     <h:commandButton value="Add Counter 1" 
      action="#{counterBean.addCounterValue}" /> 
     <h:commandButton value="Add Counter 2" 
      action="#{anotherCounterBean.addCounterValue}" /> 
    </h:panelGrid> 
</h:form> 
+0

コードを追加しました:http://stackoverflow.com/a/7583648/1065197 –

関連する問題