2013-11-04 111 views
1

我正在嘗試爲JSF中的commandButton創建一個確認對話框。我想要顯示的消息是「您確定要部署到#{deployBean.environmentName}?」,其中#{deployBean.environmentName}引用h:selectOneMenu的選定值。h:commandButton的動態消息內容確認對話框

我在h:commandButton的'onClick'參數中使用普通的JavaScript來做到這一點。 XHTML代碼如下:

<h:commandButton id="deploy" 
value="Deploy" 
action="#{deployBean.deployButtonAction}" 
disabled="#{(!deployBean.checkDeploy and (deployBean.stageComplete or deployBean.stageRunning)) or (deployBean.stageStart)}" 
onclick="return confirm('Are you sure you want to deploy to #{deployBean.environmentName}?');" > 
    <f:ajax event="keyup" render="status output detail"/> 
</h:commandButton> 

但是,環境名稱未顯示在確認對話框中。

Output of the code

請讓我知道我錯過了我的代碼。或者請讓我知道是否有更好的方法來做到這一點。

+0

嗨!你有沒有在我的答案中嘗試解決方案?你有沒有遇到任何問題? – elias

回答

1

嗯,這不會工作,因爲您提到的位普通JavaScript位。 =) 您會發現,JavaScript並不知道任何關於該語法的內容 - 在加載頁面之前,此EL表達式在服務器中僅進行一次評估,就這樣了。

即使您在您的h:selectOneMenu中執行AJAX更新,試圖確保點擊該按鈕時設置deployBean的值,onclick將僅在客戶端進行評估。所以,你可以做你想做與普通的JavaScript & DOM操作,也許是這樣的:

onclick="return confirm('Are you sure you want to deploy to ' + 
     document.getElementsByClassName('environment-name')[0].value + '?');" 

,給你一個h:selectOneMenustyleClass="environment-name"

這應該做你想做的。

當然,如果你碰巧在您的應用程序使用jQuery,你可以把它有點短:

onclick="return confirm('Are you sure you want to deploy to ' + 
     $('.environment-name').val() + '?');" 
+0

非常感謝您的全面解答。但我有一個疑問。爲什麼我們不能使用'document.getElementsById'? – eddyrokr

+0

哦,你的確可以使用'document.getElementById()',你只需要確保給表單一個id並使用實際的客戶端id(而不是組件id)。 – elias