1

我正在尝试为 JSF 中的 commandButton 创建一个确认对话框。我要显示的消息是“您确定要部署到#{deployBean.environmentName}?”,其中#{deployBean.environmentName} 指的是h:selectOneMenu 的选定值。

我在 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>

但是环境名称不会显示在确认对话框中。

代码的输出

请让我知道我的代码中缺少什么。或者请让我知道是否有更好的方法来做到这一点。

4

1 回答 1

1

嗯,那行不通,因为您提到的纯 JavaScript位。=) 你看,JavaScript 对这种语法一无所知#{deployBean.environmentName}——这个 EL 表达式只在服务器中计算一次,在页面加载之前,仅此而已。

即使您在h:selectOneMenu尝试确保在deployBean单击按钮时设置 in 的值时进行 AJAX 更新,onclick也只会在客户端进行评估。所以,你可以用普通的 JavaScript 和 DOM 操作来做你想做的事,也许是这样的:

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

并给你h:selectOneMenu一个styleClass="environment-name".

那应该做你想做的事。

当然,如果你碰巧在你的应用程序中使用了 jQuery,你可以让它更短一点:

onclick="return confirm('Are you sure you want to deploy to ' +
         $('.environment-name').val() + '?');"
于 2013-11-05T00:26:31.897 回答