0

私は金持ちです:カレンダー:

<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'))
...

私は何を見逃しますか/エラーはどこにありますか?

4

1 に答える 1

2

あなたの間違いは、それが有効になっていることをJSFに通知していないということです。disabledJSFは、フォーム送信の処理中に属性を再評価します。ただし、JSFを使用する代わりにJSを使用して有効にしたため、JSFは有効であると通知されることはなく、無効であると見なされ、スキップされます。

基本的に2つのオプションがあります。

  1. JSを使用する代わりにJSFを使用して有効にします。
  2. JSに、disabled属性でチェックする(非表示の)リクエストパラメータを設定させます。

私はJSFの方法だけを選びます。例えば

<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は必要ありません。

参照:

于 2012-11-26T13:45:42.920 に答える