4

我正在使用 Primefaces Schedule 并且我正在使用它的侦听器参数为org.primefaces.event.DateSelectEvent. 根据 DateSelectEvent.getDate 是工作日还是周末,我需要打开一个对话框或只是禁用 ajax(或不做任何事情)。为此,我需要在 .oncomplete 属性中做出决定。我已经做到了:

<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 表达式。其中一种方法是使用RequestContext#execute()内部onDateSelect侦听器方法而不是oncomplete.

RequestContext requestContext = RequestContext.getCurrentInstance();

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

另一种方法是对<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函数并调用支持 beanmethod来评估它是否是工作日的东西。

您可以使用 Ajax4jsf 之a4j:jsFunction类的:

<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 回答