0

私は本から Java を学ぼうとしていますが、最後の章までたどり着いてしまい、ループに陥ってしまいました。これは、値式を含む JSF ファイルを示しています。

#{timeBean.time}

getTime()また、変数を持つメソッドを含む TimeBean.java ファイルも示していますtime。変数はそのメソッドの外には現れません。この本はそれ#{timeBean.time}が呼び出すと言っていますgetTime()が、私はその方法を理解していないので、他のアプリケーションに拡張することはできません.

.time明確にするために、問題は、パーツがどこから来ているのか理解できないことです#{timeBean.time}

4

2 に答える 2

2

JSF はマネージド Bean と呼ばれる Bean インスタンスを作成します。これは、 EL 式#{}とも呼ばれるラップされた式を使用してページから呼び出すことができます。実際にインスタンスから getter を呼び出しています。Bean インスタンスはデフォルトで、最初の文字を小文字にしたクラスの単純名で参照されます。#{timeBean.time}getTime()timeBean

だから、この豆を持っている:

@ManagedBean
@RequestScoped
public class TimeBean{
    public Date getTime(){
        return new Date();
    }
}

アノテーションを使用@ManagedBeanして、JSF によって管理する必要があることを伝えます。Bean のスコープを表現し@RequestScopedているため、実際には、JSF はブラウザーの要求ごとに 1 つの Bean インスタンスを作成getTime()し、ページで指定するたびに getter メソッドを呼び出します。

フォーム フィールドの場合、getter メソッドと setter メソッドの両方を持つ変数を指定する必要があります。これは、フォームが処理されるときに JSF がその値を設定するためです。

@ManagedBean
@RequestScoped
public class TimeFormBean{

    //Initializes time with current time when bean is constructed
    private Date time = new Date();

    public Date getTime(){
        //No logic here, just return the field
        return time;
    }

    public void setTime(Date d){
        time=d;
    }

    public void processTime(){
        System.out.println("Time processed: " + time);
    }

}

次に、フォーム入力でそのように使用できます。

<h:form>
    <h:inputText value="#{timeFormBean.time}">  
        <f:convertDateTime pattern="yyyy-MM-dd"/>  
    </h:inputText>
    <h:commandButton value="process" action="#{timeFormBean.processTime}" />
</h:form>
于 2013-09-06T19:56:35.160 に答える