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

2024-05-21

活跃的 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 实现一起使用。

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


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(使用前将#替换为@)

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

  • 使用JQuery检查元素是否有边框?

    所以我正在玩 el css 尝试确定元素是否有边框 我用 css border style solid 设置边框 这是可行的 但实际上它设置了 4 种单独的样式 border right style border left style bo
  • 通过 Javascript 将图像切割成碎片

    我正在创建一个简单的拼图游戏 为了做到这一点 我需要将我正在使用的图片切成 20 块 Javascript 有没有办法将一张图片切成 20 个相等的部分 并将它们保存为网页中的 20 个不同的对象 或者我只需要进入 Photoshop 自己
  • 我可以使用 Selenium Webdriver 测试元素的顺序吗?

    有一个表单 其中有 3 个字段 具有 3 个不同的 ID fieldset div div fieldset
  • Thymeleaf 下拉菜单中的默认值

    我正在使用 Spring MVC 和 thymeleaf 构建一个 Web 应用程序 我的下拉菜单是这样的并且它按预期工作
  • 自 JRE 1.7.0_25 起,Batik 无法进行转换

    自从我更新到 JAVA 1 7 0 25 以来 蜡染在应用转换时会抛出异常 堆栈跟踪是 java awt image ImagingOpException Unable to transform src image at java awt
  • 如何在表格的 tbody/thead 部分周围创建边框?

    我正在尝试创建一个包含表格数据的页面 该页面必须显示为多个表格 然而 我有两个相互冲突的要求需要解决 每个表格周围都必须有边框 每个表格的列宽必须能够根据内容重新调整大小 但是 所有表中的列宽必须一致 即列的大小基于所有表中该列中最大的单元
  • Jersey 和 Spring 中的全局异常处理?

    我正在使用 Jersey 和 Spring 3 2 以及 Open CMIS 开发 RESTful Web 服务 我没有使用 Spring 的 MVC 模式 它只是 Spring IOC 和 Jersey SpringServlet 控制器
  • IntelliJ - 无效源版本:17

    我已经在 IntelliJ 中使用 Gradle 创建了一个使用 Java 17 的新 Java 项目 运行我的应用程序时出现错误Cause error invalid source release 17 我的设置 我已经安装了openjd
  • 为什么replaceAll在这行代码中不起作用? [复制]

    这个问题在这里已经有答案了 String weatherLocation weatherLoc 1 toString weatherLocation replaceAll how weatherLocation replaceAll wea
  • 在 Apache Servicemix 4 中的 OSGi 包之间共享配置文件?

    有人能够在 SMX4 中的两个或多个捆绑包之间成功共享配置吗 我正在寻找的是这样的 有一个文件 SMX HOME etc myconfiguration cfg 使此配置 可用 以便使用 Spring dm 通过 OSGi 配置管理将其注入
  • Java DNSLookup MX 记录列表。类似于 MXToolBox

    我正在构建一个程序来列出域的所有 MX 记录 起初似乎工作正常 但与在线工具进行比较后http mxtoolbox com http mxtoolbox com 有些域程序无法获取 MX 记录 而 MXToolbox 可以 我不确定原因是什
  • gwt 文本框添加更改处理程序

    我有一个从设计师那里收到的文本框 但是我在 GWT 中编写了操作 问题是文本框为空 但是当通过按下按钮用值填充文本框时 将显示警报框 通知值已更改 但没有成功 帮助我 TextBox zip1 null function onModuleL
  • div Hello div div Howdy dere pardner div div div 我明白它的作用 但为什么叫这个名字both 什么是both mean 两者的意思是 一组两件事中的每一项 左 和 右 两件事
  • 为什么我不能在 TCPDF 表中使用 č,ć,đ 图表?

    我正在为我的网站构建一个 tcpdf 文件 该 tcpdf 文件中有一个包含一些数据的表格 但我无法使该章程正常工作 对于编码 我使用 windows 1250 宪章女巫不起作用 我已经尝试过 utf 8 但仍然没有得到这个章程 tcpdf
  • 如何在 Hibernate 中自动递增复合主键中的 Id?

    我有一个带有复合主键的表 groupId and batchId 实体类看起来像 Entity name EMPLOYEE public class Employee EmbeddedId private EmployeePK employ
  • Android - 从渲染线程内结束活动

    下午好 我不熟悉 android 中的活动生命周期 并且一直在尽可能地阅读 但我不知道如何以良好的方式解决以下问题 我有一个使用 GLSurfaceView 的活动来在屏幕上绘制各种内容 在这个 GLSurfaceView 的渲染线程中 我
  • 更改javascript nodejs中所有页面的href url

    我已经实现了具有多种语言下拉菜单的引导导航栏 当我选择语言时 它将翻译页面 如何更改其他页面的 url 和按钮文本 当我选择french 将所有网址更改为 fr about and fr contact 如何使用 JavaScript 进行
  • 是否可以使“HTML 到语音”与“文本到语音”相同?

    我有一个奇怪的要求 在我现有的应用程序中我有Text2Speech为此 我使用了AVSpeechSynthesizer 到语音文本 但现在要求发生了变化 现在我需要将 HTML 文件数据转换为文本 例如HTML2Speech 我们可以想到的
  • Volley 在第一次调用方法时返回 null

    我正在尝试使用 volley 从服务器检索数据 但是当我第一次调用此方法时 我收到服务器的响应 但该方法返回 null 如果我第二次调用它 我会得到最后的响应 public String retrieveDataFromServer Str
  • removeall 和removeif 的用例

    我找到了这个 fun main val list MutableList

随机推荐