1

我有一个生成确认弹出窗口的命令按钮。确认的文本来自消息包。是否可以将参数传递给确认?

这就是我正在尝试的:

<h:commandButton value="#{tkmsg.addAccount}" action="#{ebfAccountControllerBean.specifyEbfAddAccount}" 
                        onclick="return confirm('#{tkmsg.confirmAddAccount}');">
            <f:param value="this account"/>
            <f:param value="this email"/>
</h:commandButton>

但它不起作用。我只是得到

Are you sure you want to add account {0} with email {1}?

参数是否仅适用于 OutputText 或 OutputFormat?有没有其他方法可以做到这一点?我的下一步是用表单中的数据替换“此帐户”。

4

2 回答 2

3

你正在做的事情确实不是那样的。JSF 无法将f:param标记与该 EL 表达式相关联。想想看,即使是人类也无法猜到这一点;)

您可以使用例如 Tomahawks 缓冲区将您的消息预先呈现为可通过 EL 访问的内容:

<t:buffer into="#{buffer['confirm']}">
   <h:outputFormat value="#{tkmsg.confirmAddAccount}">
      <f:param value="this account"/>
      <f:param value="this email"/>
   </h:outputFormat>
</t:buffer>

#{buffer}只是一个声明为具有请求范围的托管 bean 的 hasmap。在此之后,您可以#{buffer['confirm']}在 javascript 语句中引用。

于 2011-04-06T21:15:09.053 回答
3

Arjan 举了一个很好的例子。另一种方法是自己编写一个 JS 函数。这是一个基本的启动示例,它String使用新format()功能扩展了 JS 原型。

<script>
    String.prototype.format = function() {
        var args = arguments;

        return this.replace(/\{(\d+)\}/g, function() {
            return args[arguments[1]];
        });
    }
</script>

按如下方式使用它:

onclick="return confirm('#{tkmsg.confirmAddAccount}'.format('this account', 'this email'));"
于 2011-04-06T21:21:33.383 回答