【问题标题】:Confirmation dialog with dynamic message content for h:commandButton带有 h:commandButton 的动态消息内容的确认对话框
【发布时间】:2013-11-05 08:26:31
【问题描述】:

我正在尝试为 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>

但确认对话框中没有显示环境名称。

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

【问题讨论】:

  • 嗨!您是否尝试过我的答案中的解决方案?你有什么问题吗?

标签: javascript jsf


【解决方案1】:

嗯,这行不通,因为您提到的 plain JavaScript 位。 =) 你看,JavaScript 对 #{deployBean.environmentName} 语法一无所知——这个 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:selectOneMenu 一个styleClass="environment-name"

这应该可以满足您的需求。

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

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

【讨论】:

  • 非常感谢您的全面回答。不过我有一个疑问。为什么我们不能使用'document.getElementsById'?
  • 哦,你确实可以使用document.getElementById(),你只需要确保给表单一个id并使用实际的客户端id(不是组件id)。
猜你喜欢
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
相关资源
最近更新 更多