【问题标题】:Use dynamic element ID in #{rich:clientId()} function在 #{rich:clientId()} 函数中使用动态元素 ID
【发布时间】:2013-12-17 20:41:36
【问题描述】:

我们可以使用rich:clientId()函数通过静态ID获取元素,如下所示

document.getElementById('#{rich:clientId(JSF_ID)}').click(); 

但是,我需要使用var + "_ID" 形式的动态ID,其中var 可以是employeestudent 等,从而导致employee_IDstudent_ID 作为实际ID。

我尝试如下:

dynamicID = var + '_ID';
document.getElementById('#{rich:clientId(dynamicID)}').click();

但是,它没有用。我怎样才能做到这一点?

【问题讨论】:

  • rich:clientId 由服务器评估。如果你检查生成的 js 代码,你会看到。
  • 请指定您试图以错误方式实现的要求。正如 MrD 的回答和 johny 的评论中所述,没有办法在客户端运行与 JSF 相关的工件。因此,您要么必须建立一种无需借助服务器端查找器即可查找组件的方法,要么在服务器上附加所有适当的查找器,以便所有 JavaSscipt 函数都已经在处理适当的组件 ID。
  • @BalusC 你假设 dynamicID = 'anyText' + '_ID';有什么解决办法吗?

标签: javascript jsf jsf-2 richfaces el


【解决方案1】:

看起来您正在通过 JavaScript 设置 dynamicID,对吗? 如果是,则 EL 表达式 #{rich:clientId(dynamicID)} 在页面呈现期间无法在服务器上评估为 EL,因为当页面已经在服务器上构建时,dynamicID 仅在客户端(=浏览器)上可用并发送到浏览器。

var 来自哪里?它是如何应用于带有dynamicID 的组件的?您不能对getElementById 使用相同的方法吗?

【讨论】:

  • 假设 dynamicID = 'anyText' + '_ID';
【解决方案2】:

要在服务器端的 JSF 中将变量与常量连接,请参阅以下已回答的帖子 Concatenate strings in JSF/JSP EL and Javascript。基本上,它为您提供了为 jsp/jsf 创建自己的连接函数的方法。工作非常需要。

作为提示:您可以使用 #{rich:element(JSF_ID)} 而不是 document.getElementById('#{rich:clientId(JSF_ID)}') 来保持源可读 - 它会呈现相同的结果。

祝你好运……

【讨论】:

    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多