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实现一起使用.
简而言之,id
JSF中的默认属性生成无法用于前端开发.
Bal*_*usC 31
之所以:
选择它是因为这是唯一明智的分隔符,可以保证最终用户不会在JSF组件ID(已经过验证)中意外地使用它,并且可以通过转义它来在CSS选择器中使用它\
.
需要注意的是,HTML4规范说,结肠是一个有效的价值id
和name
属性.因此,您与"网络标准"不兼容的投诉无处可去.
ID和NAME令牌必须以字母([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预先添加.
归档时间: |
|
查看次数: |
5235 次 |
最近记录: |