4

私は Primefaces Schedule を使用しており、リスナーパラメーターがorg.primefaces.event.DateSelectEvent. DateSelectEvent.getDate が平日か週末かに基づいて、ダイアログ ボックスを開くか、単に ajax を無効にする (または何もしない) 必要があります。そのためには、の oncomelete 属性で決定を下す必要があります。私はこれまで行ってきました:

<p:ajax event="dateSelect" listener="#{myBean.onDateSelect}" oncomplete="
       if (onDateSelect.getDate == WeekDay) { 
           eventDialog.show()
       } else {
           myschedule.update()
       }"
>

明らかにonDateSelect.getDate == Weekday機能せず、バッキング Bean の関数で処理する必要がありますが、JS 関数でバッキング Bean メソッドを評価するにはどうすればよいですか?

4

3 に答える 3

2

PrimeFaces コンポーネントのoncomplete属性は、リクエストベースの EL 式の評価をサポートしていません。方法の 1 つは、 の代わりにリスナー メソッドRequestContext#execute()内で使用することです。onDateSelectoncomplete

RequestContext requestContext = RequestContext.getCurrentInstance();

if (isWeekDay(onDateSelect.getDate())) { 
    requestContext.execute("eventDialog.show()");
} else {
    requestContext.execute("myschedule.update()");
}

もう 1 つの方法は<h:outputScript>、目的の EL 式を含むブロックを ajax 更新することです。

<p:ajax event="dateSelect" listener="#{myBean.onDateSelect}" update="script" />
...
<h:panelGroup id="script">
    <h:outputScript>
        if (#{myBean.weekDaySelected}) { 
            eventDialog.show()
        } else {
            myschedule.update()
        }
    </h:outputScript>
</h:panelGroup>
于 2013-02-06T15:13:50.057 に答える
0

あなたが言及した要件に従って、Javascript関数を使用してバッキング Bean を呼び出してmethod平日かどうかを評価できるものを探していると思います。

a4j:jsFunction次のようなAjax4jsf を使用できます。

<p:ajax event="dateSelect" 
        listener="#{myBean.onDateSelect}" 
        oncomplete="checkWeekDay"/>

<a4j:jsFunction name="checkWeekDay" action="#{beanName.methodName}"/>
于 2013-02-06T08:09:30.817 に答える
0

JavaScript コマンドでも EL を使用できます。したがって、次のような isWeekDay という名前のメソッドがあると仮定するか、独自の関数を使用して日付が平日かどうかを判断します。

public boolean isWeekDay()
{
     Calendar c = Calendar.getInstance();
     c.setTime(yourDate);
     return c.get(Calendar.DAY_OF_WEEK) < 5;
}

<p:ajax event="dateSelect" listener="#{myBean.onDateSelect}" oncomplete="
       if (#{yourBean.weekDay()}) { 
           eventDialog.show()
       } else {
           myschedule.update()
       }"
>
于 2013-02-06T08:29:31.663 に答える