2013-11-04 120 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