如何在 JSF 2.0 中从 javascript 中获取元素

Posted

技术标签:

【中文标题】如何在 JSF 2.0 中从 javascript 中获取元素【英文标题】:How to get element from javascript in JSF 2.0 【发布时间】:2011-02-01 09:27:50 【问题描述】:

我有类似的 JSF 代码:

<h:inputText id="from" value="#fromToMBean.fromName"/>

我想通过 ID (from) 从 javascript 中获取此元素,但我不能,因为在生成的 html 中它是 j_idt8:from

我怎样才能得到这个元素,例如jQuery?有什么办法可以强制 JSF2 不改变 id?

【问题讨论】:

I've answered this question here. How to select PrimeFaces UI or JSF components using jQuery?的可能重复 【参考方案1】:

您可以使用 jquery。简单地说,使用一个选择器来定义它应该包含的文本。像这样的:

$( "input[name*='from']" )

'*=' 用于表示名称属性包含一些字符串。还有类似含义的'~='

详细解释和示例请访问http://api.jquery.com/attribute-contains-selector/

【讨论】:

【参考方案2】:

有什么办法可以强制 JSF2 不改变 ids 吗?

您可以设置prependId="false" 这样在生成的 HTML 中它将是 from 代替 j_idt8:from

prependId : 指示此表单是否应在前面添加的标志 在 clientId 生成期间它的 id 到它的后代的 id 过程。如果未设置此标志,则默认值为 true。

我怎样才能得到这个元素,例如jQuery?

你可以在jQuery中使用ancestorComponent:from来获取这个元素。

实际上 j_idt8:from 中的 j_idt8 是您的&lt;h:inputText/&gt; 的祖先组件的自动生成的ID

例如

<h:form id="form">
<h:inputText id="from" value="#fromToMBean.fromName"/>
</h:form>

现在生成的输入文本 id 将是 form:from

如果您不向组件提供 id,那么您的浏览器会动态生成该 ID。所以不要忘记为组件提供 id。

【讨论】:

【参考方案3】:

为了获得组件的完整 ID,请使用 EL 隐式对象及其属性,例如 #cc.clientId#component.clientId。来源:Acquire full prefix for a component clientId inside naming containers with JSF 2.0。

【讨论】:

【参考方案4】:

在 JSF 1.2 中,您可以使用 forceId="true"。我不确定您是否可以在 JSF 2 中使用 t:input,但您应该可以。那么它在 HTML 中的 ID 就是你所期望的。

【讨论】:

【参考方案5】:

您可以使用仅分配给此元素的自定义类并使用 css 选择器,也可以为表单分配一个 id 并获取 id 为 formid:from 的元素。

【讨论】:

以上是关于如何在 JSF 2.0 中从 javascript 中获取元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net core v 2.0 中从 javascript 调用 PageModel 方法

JSF 2.0 AJAX:使用 jsf.ajax.request(或其他方式)从 javascript 调用 bean 方法

如何在jsf中从localhost切换到互联网

如何在 JSF 2.0 中使会话无效?

如何在 JSF 2.0 中重定向

JSF 2.0将动态表单保存到数据库[重复]