我使用的是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方法?
答案 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()
}"
>