如何在 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 是您的<h:inputText/>
的祖先组件的自动生成的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 方法