如何从 JSF clientId 生成唯一的 JavaScript 变量名?
How can I generate a unique JavaScript variable name from a JSF clientId?
我想为 JSF 复合组件的每个 实例 定义一个 JavaScript 函数。
为此,在组件内部,我正在尝试类似的操作:
<h:outputScript>
function myFunction_#{component.clientId}(day) {
//do my instance specific stuff
}
</h:outputScript>
具体来说,我正在尝试像这样在 RichFaces 日历中使用此功能:
<rich:calendar id="calendar" ... dayClassFunction="myFunction_#{component.clientId}">
但 clientId 不一定只包含在 JavaScript 变量名称中有效的字符。
有没有办法从 JSF EL 表达式中的 clientId(或其他东西!)计算 md5 散列或类似的伪唯一值?
我需要它特定于实例,因为 return 值依赖于实例值,而 dayClassFunction 属性不接受将 clientId 本身或类似特定的东西作为参数的函数。
我以前做过这样的:
window['#{cc.clientId}'] = {
myFunction1 : function() { ... },
myFunction2 : function() { ... }
};
然后在需要的地方用
简单地调用它
dayClassFunction="window['#{cc.clientId}'].myFunction1()"
这样一来,一切都在您的组件范围内。最后,您可以为客户端 ID 添加一些前缀,以免与 window 范围内的其他变量名称发生冲突。
想不出在客户端 ID 中允许使用的任何字符会破坏 javascript。
假设它是分隔符 (:
) 那就是你可以使用的问题 fn:replace
:
function myFunction_#{fn:replace(component.clientId, ':', '_')}
当调用您的函数时,JSF 将指定 this
为 JSF 用于实现客户端的特定于实例的 JS 对象。您或许可以从中获得所需的信息。
我想为 JSF 复合组件的每个 实例 定义一个 JavaScript 函数。
为此,在组件内部,我正在尝试类似的操作:
<h:outputScript>
function myFunction_#{component.clientId}(day) {
//do my instance specific stuff
}
</h:outputScript>
具体来说,我正在尝试像这样在 RichFaces 日历中使用此功能:
<rich:calendar id="calendar" ... dayClassFunction="myFunction_#{component.clientId}">
但 clientId 不一定只包含在 JavaScript 变量名称中有效的字符。
有没有办法从 JSF EL 表达式中的 clientId(或其他东西!)计算 md5 散列或类似的伪唯一值?
我需要它特定于实例,因为 return 值依赖于实例值,而 dayClassFunction 属性不接受将 clientId 本身或类似特定的东西作为参数的函数。
我以前做过这样的:
window['#{cc.clientId}'] = {
myFunction1 : function() { ... },
myFunction2 : function() { ... }
};
然后在需要的地方用
简单地调用它dayClassFunction="window['#{cc.clientId}'].myFunction1()"
这样一来,一切都在您的组件范围内。最后,您可以为客户端 ID 添加一些前缀,以免与 window 范围内的其他变量名称发生冲突。
想不出在客户端 ID 中允许使用的任何字符会破坏 javascript。
假设它是分隔符 (:
) 那就是你可以使用的问题 fn:replace
:
function myFunction_#{fn:replace(component.clientId, ':', '_')}
当调用您的函数时,JSF 将指定 this
为 JSF 用于实现客户端的特定于实例的 JS 对象。您或许可以从中获得所需的信息。