【问题标题】:Accessing html field values in JSF framework在 JSF 框架中访问 html 字段值
【发布时间】:2009-08-27 11:17:57
【问题描述】:

默认情况下,JSF 会动态呈现 HTML 字段 id 名称。 ID 名称以 formname:id_some_random_number 格式随机生成。

因此我无法使用 document.getElementById("")。

这个问题有解决办法吗?

【问题讨论】:

    标签: javascript jsf


    【解决方案1】:

    如果一切都失败了,您可以尝试为元素提供唯一的 css 类,然后通过 getElementsByClassName() 访问它们。或者尝试浏览具有已知 id 的元素的 childNodes()。或者您可以在目标元素 inside 添加一个已知 id 的节点,然后使用 .parentNode :)

    【讨论】:

    • 这似乎是一个非常复杂的解决方案......为什么只使用“id”属性?
    • 正如发帖者所说,他不能使用 id,因为它是随机生成的。
    【解决方案2】:

    您只需要指定输入的 ID。 但是请注意,ID 将以包含输入字段的表单的 ID 为前缀。

    例如:

    <h:form id="myForm">
        ...
        <h:inputText id="myInput" .../>
    

    inputText 的真实 ID 是 myForm:myInput

    因此,这段 Javascript 代码可以工作:

    var obj = document.getElementById("myForm:myInput");
    


    编辑(为了精确)

    更准确地说,如果一个组件在 Java 中实现了NamingContainer 接口,那么所有嵌套的组件的 ID 都会以该组件的 ID 为前缀。 &lt;h:form/&gt; 组件就是这种情况,&lt;h:datatable/&gt; 也是这种情况。

    【讨论】:

    • 是的,这就是它的工作方式,但在某些情况下,如果我们将组件嵌入到另一个组件中,则生成的 id 是不可预测的。
    • 您能否编辑您的原始帖子以举例说明这种情况?
    • 这适用于我的应用程序。我不喜欢使用它,就好像您更改任何组件 ID 或将它们以不同的形式放置,您的 javascript 将停止工作。
    【解决方案3】:

    您可以使用UIComponent.getClientId 获取生成的ID(JSF 2,如果您可以使用它,添加了一个无参数版本,这使得这对EL 表达式更有用)。有关使用 JSF 组件标识符的提示,请参阅 this blog post(但请注意注意事项)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 2022-10-14
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      相关资源
      最近更新 更多