在用于评估Primefaces对象的JavaScript if语句中调用Bean函数

时间:2013-02-06 06:33:39

标签: javascript jsf-2 primefaces

我使用的是Primefaces Schedule,我正在使用的监听器参数为org.primefaces.event.DateSelectEvent。 根据DateSelectEvent.getDate是一个星期还是周末,我需要打开一个对话框或者只是禁用ajax(或者什么也不做)。为此,我需要在oncompelete属性中做出决定。我已经走了这么远:

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

嗯,显然onDateSelect.getDate == Weekday不起作用,必须由我的支持bean上的函数来处理,但是如何在JS函数中评估我的支持bean方法?

3 个答案:

答案 0 :(得分:2)

PrimeFaces组件的oncomplete属性不支持评估基于请求的EL表达式。其中一种方法是在onDateSelect侦听器方法中使用RequestContext#execute()而不是oncomplete

RequestContext requestContext = RequestContext.getCurrentInstance();

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

另一种方法是ajax-update包含所需EL表达式的<h:outputScript>块。

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

答案 1 :(得分:0)

根据您提到的要求,我相信您正在寻找可以使用Javascript函数并调用您的支持bean method以评估其是否为工作日的内容。

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

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

<a4j:jsFunction name="checkWeekDay" action="#{beanName.methodName}"/>

答案 2 :(得分: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()
       }"
>