我正在尝试在JSF中为commandButton创建一个确认对话框。我想要显示的消息是"您确定要部署到#{deployBean.environmentName}吗?",其中#{deployBean.environmentName}指的是h:selectOneMenu的选定值。
我在' onClick'中使用了纯JavaScript。参数h:commandButton来做到这一点。 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>
但是环境名称不会显示在确认对话框中。
请告诉我我的代码中缺少的内容。或者,如果有更好的方法,请告诉我。
答案 0 :(得分:1)
嗯,因为你提到的普通JavaScript 位,它不会起作用。 =)
你看,JavaScript对#{deployBean.environmentName}
语法一无所知 - 在页面加载之前,这个EL表达式只在服务器中进行一次评估,就是它。
即使您在h:selectOneMenu
尝试确保单击按钮时deployBean
中的值设置为onclick
时进行了AJAX更新,onclick="return confirm('Are you sure you want to deploy to ' +
document.getElementsByClassName('environment-name')[0].value + '?');"
也只会在客户端进行评估侧。所以,你可以用简单的JavaScript&amp; DOM操作,可能是这样的:
h:selectOneMenu
并提供styleClass="environment-name"
onclick="return confirm('Are you sure you want to deploy to ' +
$('.environment-name').val() + '?');"
。
那应该做你想要的。
当然,如果你碰巧在你的应用程序中使用jQuery,你可以缩短它:
{{1}}