2012-06-25 38 views
1

發送的值,我有三個下拉列表其值由下面的JavaScript函數都被複制到<h:inputHidden>組件:輔助Bean沒有得到由JavaScript

function getBirthDate() { 
    var months = document.getElementById("months") 
    var hidden1 = document.getElementById("formsignup:monthField"); 
    hidden1.value = months.options[months.selectedIndex].text; 
    var days = document.getElementById("days"); 
    var hidden2 = document.getElementById("formsignup:dayField"); 
    hidden2.value = days.options[days.selectedIndex].value; 
    var years = document.getElementById("years"); 
    var hidden3 = document.getElementById("formsignup:yearField"); 
    hidden3.value = years.options[years.selectedIndex].value; 
} 

這裏有三個<h:inputHidden>組件:

<h:inputHidden value="#{signupBean.month}" id="monthField"/> 
<h:inputHidden value="#{signupBean.day}" id="dayField"/> 
<h:inputHidden value="#{signupBean.year}" id="yearField"/> 

這是應該調用函數的命令按鈕,該函數將值複製到輸入,然後將它們提交給後備bean。

<h:commandButton image="images/images/signup1.png" 
    styleClass="joinnow" 
    id="joinus" action="#{signupBean.save}" 
    onclick="getBirthDate()" /> 

但是,他們在抵達後臺bean。這是如何造成的,我該如何解決這個問題?

編輯:當我嘗試從JSF組件中選擇元素時,jQuery凍結。元素的ID有問題嗎?

編輯:下面是與HTTP請求一起發送的變量屏幕截圖,證明值已正確發送。這個bean有什麼問題?

enter image description here

+0

你確定正確的更改值已發送到服務器?檢查瀏覽器的開發人員工具集中的HTTP流量。 – BalusC

+0

確保你的'在你的''內,並且你的'getBirthDate'方法可以工作,你可以在Firefox中使用console.log()'測試每個pass(使用firebug)或Chrome(使用Chrome控制檯按Ctrl + Shift + J)。 –

+0

關於ID,JSF將通過以下格式更改組件的ID:,例如在'如果你的JSF組件不在像<! - 這裏有一些內容的形式之外,那麼「myInputText」將是「myForm:myInputText」 .. - >'myInputText「id將是」myInputText「,因爲它不在容器內。 –

回答

0

你可以檢查你的bean的範圍,如果在得到reintialized您提交..在這種情況下,如果值正在從客戶端發送來的隱藏字段獲取其初始值不管。

0

您可以使用提醒聲明來檢查對象是否存在。例如

function getBirthDate() { 
var months = document.getElementById("months") 
var hidden1 = document.getElementById("formsignup:monthField"); 
alert(months);alert(months.value); 
alert(hidden1);alert(hidden1.value); 

如果對象值爲null ID是你給獲得元素是不恰當..還要檢查你是從對象所獲得的價值。我認爲它可以幫助