2011-04-06 27 views
1

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

这就是我想:

<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}? 

Do参数只能与OutputText或OutputFormat一起使用吗?有没有其他方法可以做到这一点?我的下一步是用表单中的数据替换“此帐户”。

回答

3

你所做的确实不会那样工作。 JSF无法将f:param标签与该EL表达式相关联。试想一下,即使是一个人也无法猜到这一点;)

你可以将你的信息预先渲染成可通过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。之后,您可以在javascript语句中参考#{buffer['confirm']}

2

Arjan给出了一个很好的例子。另一种方法是自己写一个JS函数。以下是一个基本的启动示例,它将JS String原型扩展为新的format()函数。

<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'));"