2011-05-24 114 views
0

我在JS中很新,並且遇到了使用來自javascript的託管bean的問題。從javascript運行jsf託管bean方法

我想通過h:inputHidden的方式來做到這一點,但仍然沒有正確的行爲。

<h:inputHidden id="hidden" value="#{bean.myVariable}" /> 

和我的腳本

<script type="text/javascript"> 
     function func(){ 
      var varFromBean = document.getElementById('myForm:myVariable').value; 
      .... 
     } 

</script> 

我在錯誤的方式做的不便? 還有另外一種方法通過運行託管bean方法來定義JS變量?

在此先感謝!

編輯

我需要它豐富:日曆自定義。我需要允許用戶從特定時間段選擇日期。

<rich:calendar value="#{bean.selectedDate}" 
       isDayEnabled="disableDays" dayStyleClass="disabledDaysStyle" 
       firstWeekDay="1"/> 

和完整的JavaScript這個是:

首先採用H:

<script type="text/javascript"> 
     function disableDays(day){ 
      var curDt = new Date(); 
      if (curDt == undefined){ 
       curDt = day.date.getDate; 
      } 
      var period = document.getElementById('form:period').value; 
      if ((curDt.getTime() + period) &gt; day.date.getTime()) return true; 
      if (curDt.getTime() &lt; (day.date.getTime())) return true; 
      else return false; 
     } 
     function disabledDaysStyle(day){ 
      if (!disableDays(day)) return 'rich-calendar-boundary-dates'; 
     } 
</script> 

回答

1

若要從JS您可以按以下方式使用jQuery隱藏JSF輸入托管bean值的inputText代替在jQuery中定義用於搜索的類('classForSearch')。要隱藏輸入它添加簡單的CSS類(「INPT隱藏」):

<style> 
    .inpt-hidden { display: none; } 
</style> 

<h:inputText value="#{bean.myVariable}" styleClass="inpt-hidden classForSearch" /> 

之後,你就可以用來訪問它的jQuery:

<script type="text/javascript"> 
     function func(){ 
      var varFromBean = jQuery('.classForSearch').val(); 
      .... 
     } 

</script> 

熱設置的jQuery,你可以找到在:http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery#Setup

+0

我想補充一點,你也可以給h:inputText一個ID並在ID上使用jQuery方法。 – 2011-05-24 18:23:05

+0

非常感謝,這可能會有所幫助。但我想知道除了使用h:inputText之外是否還有其他方法?這似乎是相當不自然的一個..? – ayscha 2011-05-24 20:43:31

0

託管bean方法不會在嘗試獲取客戶端的元素值時運行。它只是返回頁面加載後已經存在的值。要運行方法,您可以使用a4j:jsFunction(或者如果您不使用jsf 1.2,則使用它的模擬)使用您需要的參數。