p:当我使用beforeShowDay时,日历不起作用

时间:2013-11-21 08:50:34

标签: jsf jsf-2 primefaces calendar

我正在使用primefaces在JSF上工作,当我需要禁用某些日期时,我有一个日历字段,所以我使用了名为beforeShowDay的属性,但问题是当我使用此属性时日历未打开(不弹出),但当我不使用beforeShowDay属性时,它正在运行,

我的代码是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html <!--namespaces-->>
    <h:body>
      <ui:composition>
        <ui:define name="content">
        <script type="text/javascript">
          function tuesdaysAndFridaysDisabled(date)
          {
            var day = date.getDay();
            return [(day != 2 && day != 5), '']
          }
        </script>
        <h:form>
        <p:calendar id="leavefrom"  value="#{requestbean.leavefrom}" beforeShowDay="tuesdaysAndFridaysDisabled" effect="drop"  pattern="yyyy/dd/MM" required="true" >
            <p:ajax update="leaveto" event="dateSelect" />
        </p:calendar>      
         </h:form>                      
       </ui:define>
     </ui:composition>
    </h:body>
</html>

对此有任何建议..

1 个答案:

答案 0 :(得分:1)

return [(day != 2 && day != 5), '']

&是Facelets中的一个特殊字符,应该会从Facelets编译器中导致错误“The entity name must immediately follow the '&' in the entity reference”。我真的很惊讶你没有得到它。也许你的编辑器正在做一些特别的事情,或者你实际上没有运行问题所示的代码。在浏览器中检查JSF生成的HTML输出应该提供线索。

无论如何,您应该将整个脚本放在<![CDATA[ .. ]]>块中:

<h:outputScript>
 <![CDATA[
  function tuesdaysAndFridaysDisabled(date)
  {
    var day = date.getDay();
    return [(day != 2 && day != 5), '']
  }
 ]]>
</h:outputScript>

或者更好的是,将它放在一个独立的JS文件中/resources/functions.js

<h:outputScript name="functions.js" />    

然后您的代码段开始为我工作。