活跃的 JSF(或 Primefaces)用户能否解释一下为什么默认情况下会发生这种情况,为什么没有人对此采取任何措施:
<p:commandLink id="baz" update=":foo:boop" value="Example" />
它生成的标记不能在没有 hack 的情况下在 JavaScript 或 CSS 中使用,并且通常应被视为无效:
<a href="javascript:void(0);" id=":foo:bar:baz">Example</a>
The id=":bar:baz:foo"
这里的属性包含冒号,这对于该属性来说不是有效字符,至少从 CSS 角度来看是这样。
虽然该属性根据规范可能是有效的,但它无法与现实世界的 JavaScript 和 CSS 实现一起使用。
简而言之,默认id
JSF 中的属性生成无法用于前端开发。
The :
选择它是因为这是唯一合理的分隔符,可以保证最终用户不会意外地在 JSF 组件 ID 中使用它(已被已验证 http://docs.oracle.com/javaee/6/api/javax/faces/component/UIComponent.html#setId%28java.lang.String%29) and可以通过使用转义来在 CSS 选择器中使用它\
.
请注意,HTML4规范 http://www.w3.org/TR/html4/types.html#h-6.2说冒号是valid值在id
and name
属性。因此,您关于它与“网络标准”不兼容的抱怨毫无意义。
ID and NAME标记必须以字母 ([A-Za-z]) 开头,后面可以跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_")、冒号 ( “:”)和句点(“.”)。
唯一的问题是:
是 CSS 选择器中需要转义的特殊字符。 JS 本身没有冒号问题。这document.getElementById("foo:bar")
工作得很好。唯一可能的问题是在 jQuery 中,因为它使用 CSS 选择器语法。
如果您确实需要,那么您可以随时更改默认分隔符:
通过设置javax.faces.SEPARATOR_CHAR
上下文参数例如-
or _
如下。您只需保证不在 JSF 组件 ID 中的任何地方使用该字符yourself(尚未经过验证!)。
<context-param>
<param-name>javax.faces.SEPARATOR_CHAR</param-name>
<param-value>-</param-value>
</context-param>
The _
顺便说一下,它还有一个额外的缺点,它出现在 JSF 自动生成的 ID 中,例如j_id1
,因此您还应该确保all NamingContainer http://docs.oracle.com/javaee/6/api/javax/faces/component/NamingContainer.html整个 JSF 页面中的组件都有一个固定的 ID,而不是自动生成的 ID。否则 JSF 将在查找命名容器子项时遇到问题。
我只是不推荐它。从长远来看,它是令人困惑和脆弱的。再想一想,普通 JSF Web 应用程序中的独特元素本身通常已经不在表单或表格内。它们通常仅代表主要布局方面。我想说的是,从一般的 HTML/CSS 角度来看,这是一个糟糕的设计。只需通过可重用的 CSS 类名而不是 ID 来选择它们即可。如果您确实需要,您可以随时将其包装在纯 HTML 中<div>
or <span>
JSF 不会在其 ID 前面加上前缀。
也可以看看:
- HTML 中 id 属性的有效值是什么? https://stackoverflow.com/questions/70579/what-are-valid-values-for-the-id-attribute-in-html
- 是否可以更改 JSF 中的元素 id 分隔符? https://stackoverflow.com/questions/2142929/is-it-possible-to-change-the-element-id-separator-in-jsf
- 如何使用 jQuery 选择 JSF 组件? https://stackoverflow.com/questions/7927716/how-to-select-primefaces-ui-or-jsf-components-using-jquery
- 如何在 CSS 选择器中使用 JSF 生成的带有冒号“:”的 HTML 元素 ID? https://stackoverflow.com/questions/5878692/how-to-use-jsf-generated-html-element-id-in-css-selectors
- 将 JavaScript 集成到 JSF 复合组件中,这是一种干净的方式 https://stackoverflow.com/questions/12615556/integrate-javascript-in-jsf-composite-component-the-clean-way
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)