2017-05-15 4 views
1

私は単一のセッションBeanのための基本的なテンプレートを持っているとしようとしています。例を実行するときシングルトンセッションBean

https://docs.oracle.com/javaee/7/tutorial/ejb-basicexamples002.htm

は、しかし、私はcount.hitCountの値を印刷することはできませんよ。そこで、私は「カウンターのアーキテクチャ」に含まれて例を挙げました。

変数にアクセスするときにゲッターがないときによくある問題が見つかりました。例えば、のindex.htmlで:

@Named 
@SessionScoped 
public class Count implements Serializable { 

    @EJB 
    private CounterBean counterBean; 

    private int hitCount; 

    public Count() { 
     this.hitCount = 0; 
    } 

    public int getHitCount() { 
     hitCount = counterBean.getHits(); 
     return hitCount; 
    } 
    public void setHitCount(int newHits) { 
     this.hitCount = newHits; 
    } 

最後に、CounterBean.java増加:

<ui:define name="title"> 
     This page has been accessed #{count.hitCount} time(s). 
</ui:define> 

しかし、Count.javaにおけるゲッタgetHitCount()を含むされます変数:

@Singleton 
public class CounterBean { 
    private int hits = 1; 

    // Increment and return the number of hits 
    public int getHits() { 
     return hits++; 
    } 
} 

ありがとうrのヘルプとコメント、彼らは非常に感謝しています。

+0

? "count.hitCountの値を出力できません。"私たちに有用なことは何も教えてくれません。 –

+0

'Count'は' @ RequestScoped'でなければなりません。 'Count.initialize()'( '@ PostConstruct'でアノテーションされています)の' CounterBen.incHits() 'によってCounterBean.hitsの値を増やしてください。 –

答えて

1

それが表示されてしまった回のカウンターを持つにfacelet:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://xmlns.jcp.org/jsf/html"> 
    <h:head> 
    <title>Facelet Title</title> 
</h:head> 
    <h:body> 
    This page displayed #{counterController.hitCount} times. 
    </h:body> 
</html> 

CounterControllerは、その@PostConstruct方法でCounterBean.hitCountをインクリメントする@RequestScoped Beanです:

package x; 

import javax.annotation.PostConstruct; 
import javax.ejb.EJB; 
import javax.inject.Named; 
import javax.enterprise.context.RequestScoped; 

@Named(value = "counterController") 
@RequestScoped 
public class counterController 
{ 

    @EJB 
    private CounterBean counterBean; 

    @PostConstruct 
    public void initialize() 
    { 
    counterBean.incHitCount(); 
    } 

    public int getHitCount() 
    { 
    return counterBean.getHitCount(); 
    } 

    public CounterController() 
    { 
    } 

} 

CounterBean@Singleton EJBにありますhitCountを格納します。 @StartUp注釈はそれは熱心に構築豆(任意のクライアント要求が受け入れ前に、アプリケーションの起動時に作成された)ん:実際に何が起こっている

package x; 

import javax.ejb.Singleton; 
import javax.ejb.Startup; 
import lombok.Data; 

@Singleton 
@Startup 
public class CounterBean 
{ 
    private int hitCount; 

    public int getHitCount() 
    { 
    return hitCount; 
    } 

    public void incHitCount() 
    { 
    hitCount++; 
    } 

    public CounterBean() 
    {} 
} 
+0

あなたの助けと時間をいただきありがとうございます。乾杯 – Xalapa

関連する問題