默认情况下,JSF生成不可用的ID,这与Web标准的CSS部分不兼容

And*_*kov 10 html java jsf web-standards

有活跃的JSF(或Primefaces)用户可以解释为什么默认情况下会发生这样的原因:为什么没有人对此做任何事情:

<p:commandLink id="baz" update=":foo:boop" value="Example" />
Run Code Online (Sandbox Code Playgroud)

哪个生成的标记在没有hacks的情况下无法在JavaScript或CSS中使用,通常应被视为无效:

<a href="javascript:void(0);" id=":foo:bar:baz">Example</a>
Run Code Online (Sandbox Code Playgroud)

id=":bar:baz:foo"此处的属性包含冒号,这些冒号不是此属性的有效字符,至少从CSS角度来看.

虽然该属性可能根据规范有效,但它无法与真实的JavaScript和CSS实现一起使用.

简而言之,idJSF中的默认属性生成无法用于前端开发.

Bal*_*usC 31

之所以:选择它是因为这是唯一明智的分隔符,可以保证最终用户不会在JSF组件ID(已经过验证)中意外地使用它,并且可以通过转义它来在CSS选择器中使用它\.

需要注意的是,HTML4规范说,结肠是一个有效的价值idname属性.因此,您与"网络标准"不兼容的投诉无处可去.

IDNAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(" - "),下划线("_") ,冒号(":")和句号(".").

因此唯一的问题是:CSS选择器中的特殊字符需要被转义.JS对冒号没有任何问题.该document.getElementById("foo:bar")作品完美的罚款.唯一可能的问题是在jQuery中,因为它使用CSS选择器语法.

如果您确实需要,则可以:通过将javax.faces.SEPARATOR_CHAR上下文参数设置为例如-_如下来更改默认分隔符.您只需要保证不自己在JSF组件ID中的任何位置使用该字符(它尚未经过验证!).

<context-param>
    <param-name>javax.faces.SEPARATOR_CHAR</param-name>
    <param-value>-</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

_的方式有它发生在JSF自动生成的ID,如额外的缺点j_id1,因此你也应该确保所有 NamingContainer在整个JSF页面组件都有一个固定的ID,而不是一个自动生成一个.否则,JSF将在查找命名容器子项时遇到问题.

我不会推荐它.这是长期令人困惑和脆弱的.再想一想,普通JSF webapp中的独特元素本身通常不在表单或表格中.它们通常只代表主要的布局方面.我会说,从一般的HTML/CSS角度来看,这是一个糟糕的设计.只需通过可重用的CSS类名而不是ID来选择它们.如果您确实需要,可以始终将其包装在纯HTML中,<div>或者<span>其ID不会由JSF预先添加.

也可以看看:

  • 你想继续重复这个:)我也会重复自己:我从未遇到过这方面的严重问题.我的普通JSF webapp中的独特元素本身从不在表单或表格中.它们只代表主要的布局方面.我会说,从一般的HTML/CSS角度来看,这是一个糟糕的设计. (8认同)
  • 因为HTML不是CSS. (4认同)
  • 然后,您应该阅读CSS规范如何处理CSS选择器中的冒号和句点等特殊字符.你需要通过\来逃避它们.为什么HTML和CSS"标准"不同步是一个与JSF完全无关的不同问题. (4认同)
  • @Daniel:这是 JS 特有的。\ 又是 JS 字符串中的转义字符,因此您需要对其进行双重转义。 (2认同)
  • 我确认http://www.w3.org/TR/html401/types.html#type-name规范实际上将冒号列为有效字符.这并没有解决无法在CSS中引用类似id的问题.当前的a级浏览器实现似乎将第一个冒号之后的所有内容视为仅被忽略的伪选择器,因此整个选择器未应用. (2认同)
  • 另请参阅http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier,禁止对选择器使用冒号.换句话说,使用其默认设置,JSF对CSS开发人员无法使用. (2认同)

归档时间:

查看次数:

5235 次

最近记录:

6 年,7 月 前