使用JavaScript启用/禁用rich:calendar不起作用

时间:2012-11-26 13:25:23

标签: javascript jsf-2

我有一个富人:日历:

<rich:calendar
  id                  = "endDate"
  value               = ...
  datePattern         = "yyyy-MM-dd"
  enableManualInput   = "true"
  disabled        = "#{detailModel.mode == detailModel.viewMode}"
/>

我想用javascript启用/禁用它。 我有以下代码,但它对日历没有影响:

<script type="text/javascript">
 //<![CDATA[ 
  function setDafaults(defType, endDate, startTime)
  {
    var definitionType = defType.options[defType.selectedIndex].text;

    if(definitionType == 'DEFAULT')
    {
       endDate.disabled = true;
       startTime.value =  "#{detailModel.afterObject.getDefaultStartTime()}";
    }
    else
    {
       endDate.disabled = false;
       startTime.value =  '';
    }
  }
 //]]>

</script>

当selectOneMenu改变时调用该函数:

...
onchange="setDafaults(document.getElementById('detailForm:definitionType'),
                      document.getElementById('detailForm:endDate'),
                      document.getElementById('detailForm:startTime'))
...

我错过了什么/错误在哪里?

1 个答案:

答案 0 :(得分:2)

您的错误是您没有通知JSF它已启用。在处理表单提交期间,JSF将重新评估disabled属性。但是,当您使用JS而不是使用JSF启用它时,JSF从未被指示它已启用,因此仍然认为它已被禁用,因此将跳过它。

你基本上有两个选择:

  1. 使用JSF启用它而不是使用JS。
  2. 让JS设置一些(隐藏的)请求参数,您也可以在disabled属性中检查它。
  3. 我只选择JSF方式。 E.g。

    <h:selectOneMenu value="#{bean.definitionType}">
        <f:selectItem itemValue="DEFAULT" /> 
        <f:selectItem itemValue="NOT_DEFAULT" /> 
        <f:selectItem itemValue="SOME" /> 
        <f:ajax render="endDate" />
    </h:selectOneMenu>
    <rich:calendar id="endDate" ... disabled="#{bean.definitionType == 'DEFAULT'}" />
    

    基本上都是这样。不需要一些讨厌的JS。

    另见: