如何在 CSS 选择器中使用 JSF 生成的带有冒号“:”的 HTML 元素 ID?

2024-05-05

我一直在使用 JSF 处理一个简单的 Java EE 项目。

<h:form id="phoneForm">
    <h:dataTable id="phoneTable">

    </h:dataTable>
</h:form>

我尝试通过设置 CSS#phoneTable { ... },但是它不起作用。检查客户端的 HTML 源代码后发现: JSF 生成的 HTML 表获取以下形式的客户端 IDid="phoneForm:phoneTable"。我无法通过以下方式应用 CSS#phoneForm:phoneTable { ... },因为冒号表示伪选择器的开始并导致错误。

我如何在 CSS 选择器中使用它?


The :是 CSS 标识符中的一个特殊字符,它代表一个字符的开始伪类选择器 http://www.w3.org/TR/css3-selectors/#pseudo-classes like :hover, :first-child等等。你需要逃避它。

#phoneForm\:phoneTable {
    background: pink;
}

这仅在 IE6/7 中不起作用。如果您也想支持这些用户,请使用\3A相反(后面有一个尾随空格!)

#phoneForm\3A phoneTable {
    background: pink;
}

以上适用于所有浏览器。


还有其他几种方法可以解决这个问题:

  1. 只需将其包装在纯 HTML 元素中并通过它设置样式即可。

     <h:form id="phoneForm">
         <div id="phoneField">
             <h:dataTable id="phoneTable">
    

    with

     #phoneField table {
         background: pink;
     }
    

  2. Use class代替id. E.g.

     <h:dataTable id="phoneTable" styleClass="pink">
    

    with

     .pink {
         background: pink;
     }
    

    or

     table.pink {
         background: pink;
     }
    

    另一个优点是这允许更多的抽象自由。当您想在另一个元素上重用相同的属性时,CSS 可在多个元素上重用,无需添加选择器和/或复制粘贴属性。


  3. 仅自 JSF 2.x 起:更改 JSF 默认值UINamingContainer由以下上下文参数分隔web.xml. E.g.

     <context-param>
         <param-name>javax.faces.SEPARATOR_CHAR</param-name>
         <param-value>-</param-value>
     </context-param>
    

    这样分隔符就变成了-代替:.

     #phoneForm-phoneTable {
         background: pink;
     }
    

    缺点是您需要确保自己不会在 ids 中的任何地方使用该字符,因此这是一种非常脆弱的方法。我愿意not推荐这种方法。这是一个不好的做法。


  4. 仅自 JSF 1.2 起:禁用表单的前置id.

     <h:form prependId="false">
         <h:dataTable id="phoneTable">
    

    这样你就可以使用

     #phoneTable {
         background: pink;
     }
    

    缺点是<f:ajax>将无法找到它,并且这被认为是不好的做法:UIForm 与 prependId="false" 中断 https://stackoverflow.com/questions/7415230/uiform-with-prependid-false-breaks-fajax-render. I do not推荐这种方法。这是一个不好的做法。而且,这个属性并不存在于所有其他的UINamingContainer组件,所以你仍然必须以正确的方式处理它们(上面的#1和/或#2)。


In your具体情况,我认为将其转换为#2 中描述的 CSS 类是最合适的解决方案。 “电话表”似乎并不代表网站范围内的独特元素。真正的网站范围内的唯一元素(例如页眉、菜单、内容、页脚等)通常不会包装在 JSF 表单或其他 JSF 命名容器中,因此它们的 ID 无论如何都不会添加前缀。

也可以看看:

  • 如何使用 jQuery 选择 JSF 组件? https://stackoverflow.com/questions/7927716/how-to-select-jsf-components-using-jquery
  • 默认情况下,JSF 生成不可用的 ID,这些 ID 与 Web 标准的 CSS 部分不兼容 https://stackoverflow.com/questions/10726653/by-default-jsf-generates-unusable-ids-which-are-incompatible-with-css-part-of/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 CSS 选择器中使用 JSF 生成的带有冒号“:”的 HTML 元素 ID? 的相关文章

随机推荐

  • 将数据插入多个表 PHP MySQL

    我有一个用于存储食谱的基本数据结构 它由三个表组成 如下所示 表 1 食谱 recipe id recipe name 表 2 成分 成分 ID 成分名称 表 3 配方 成分 配方 id 成分 id 我在添加新配方时遇到问题 想知道插入的最
  • 使用 CSS 首字下沉

    我怎样才能使每个段落的第一个字符看起来像这样 我更喜欢只使用 CSS p first letter float left font size 5em line height 0 5em padding bottom 0 05em paddi
  • 从 C++ 代码自动生成流程图 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要自动地用 C 代码构造流程图 最好每个源文件一个流程图 有没有任何工具 最好是 C Python
  • 批量设置变量=%变量:~1%是什么意思

    谁能解释一下是什么 1 在批处理文件中的以下语句中 我分配的值 variable到服务器名称并尝试过echo variable 我得到与输出相同的服务器名称 谁能解释一下下面的语句是如何工作的 set variable variable 1
  • 如何使用 Kinect 追踪一个人 (trackingID)

    我想跟踪第一个人 并使用这个人的右手在我制作的应用程序中导航 我可以接管光标 现在我只想跟踪一个人 因此 基本上 当一个人在程序中导航时 有人走在他身后或与这个人一起看 如果他们移动 kinect 不应该识别其他任何人 我怎样才能实现这个
  • 在链接时合并全局数组/从多个编译单元填充全局数组

    我想定义一系列的东西 比如事件处理程序 的内容 该数组在编译时是完全已知的 但定义在 多个编译单元 分布在多个库中 至少在最终 静态 链接之前是相当解耦的 我想要 也保持这种方式 因此添加或删除编译单元将 还可以自动管理事件处理程序 而无需
  • 在 JSF 应用程序中通过反射读取托管 Bean 的内容

    我想以自动生成的方式打印出支持 bean 的内容 所以所有的内容都出现在一个JSP上 无论如何 这可能吗 提前致谢 丹尼尔 一种方法是使用JavaBean API http java sun com javase 6 docs api ja
  • mysqli_result 无法转换为 int [重复]

    这个问题在这里已经有答案了 我想将 SQL COUNT 的结果存储在变量中 然后将它们相除 但是出现错误 注意 类 mysqli result 的对象在 中无法转换为 int countrows SELECT count AS NumRow
  • ArrayAdapter.getCount() NullPointerException

    我的 Android 应用程序中有以下代码 protected ArrayList
  • C# - 日期时间构造函数调用

    所以 我有这个程序 它有一个输入为 DateTime 的构造函数 但是每当我尝试创建该类的对象并传递 DateTime 作为参数时 就会出现错误 代码如下 public Student DateTime dob DateofBirth do
  • Code First:避免鉴别器列并保留继承

    在我的项目中我有 public class BaseEntity Key public int Id get set 然后我必须定义 10 多个 POCO 类来定义数据库中的表 public class MyTable BaseEntity
  • plm回归中的错误

    同事 我有面板数据 Company year Beta NI Sales Export Hedge FL QR AT Foreign 1 1 2010 2 2052800 293000 1881000 78 6816 0 23 5158 1
  • 捕获由纯 C++ dll 中的 MFC 应用程序生成的 Windows 消息

    首先 这可能吗 我有一个与某些硬件接口的第三方 dll 它是用MFC编写的 我 从 dll 供应商处 收到了一个示例 Visual Studio 2010 解决方案 该解决方案只有一个项目 调用相关第三方 dll 的 MFC 应用程序 ex
  • 如何创建或稳定 FMDB 中两个表之间的关系?

    我是 iOS 开发新手 也是 SQLITE 数据库新手 我在我的项目中使用 FMDB 作为包装器 我有两个表 1 ParticepentsTable and 2 ExerciseTable ParticepentsTable包含 4 行 例
  • SQLSTATE[HY000]:一般错误:1215 无法添加外键约束 laravel 9

    尝试分配外键 但是当您运行迁移时 我收到此错误 我不明白问题是什么 SQLSTATE HY000 一般错误 1215 无法添加外键约束 SQL alter tablecategories添加约束categories parent key f
  • 有没有办法找出我尚未同步的变更集?

    在 TFS 中我可以这样做 gt tf get preview 找出自上次同步以来哪些文件已更改 但我想知道这些文件更改属于哪些变更集 类似 tf历史记录 的输出应用于我缺少的更改 有内置的方法可以做到这一点吗 注意 我是一个命令行人员 因
  • Javascript:typeof表示“函数”,但它不能作为函数调用

    这次我对 Javascript 真的很困惑 var x Array prototype concat call typeof x function x Uncaught TypeError x is not a function 这里到底发
  • Altair 限制条数

    假设我有一个像这样的数据框 label counts 4 4 8 5 5 7 6 6 6 7 7 5 0 0 4 1 1 3 2 2 2 3 3 1 我想用 Altair 制作一个条形图 其中条形的高度是计数 标签是标签 如果我想要前 3
  • 如何在redux中设置初始状态

    我试图弄清楚如何在 redux 中设置商店的初始状态 我在用着https github com reactjs redux blob master examples todos with undo reducers index js htt
  • 如何在 CSS 选择器中使用 JSF 生成的带有冒号“:”的 HTML 元素 ID?

    我一直在使用 JSF 处理一个简单的 Java EE 项目