Java Server Faces JSF - 谁负责自动生成的 id?

Posted

技术标签:

【中文标题】Java Server Faces JSF - 谁负责自动生成的 id?【英文标题】:Java Server Faces JSF - who is responsible for auto generated id's? 【发布时间】:2011-06-05 04:35:32 【问题描述】:

Faces Servlet 将 jsp 编译为工作目录中的 servlet 时,会生成 id,如 j_id_jsp_1024919151_1...

id 什么时候改变?我在同一台机器上试过,清理工作目录,还是一样。我在同一台机器上启动了另一个 Apache Tomcat,我得到了新的 id...

感谢斯蒂芬

【问题讨论】:

【参考方案1】:

当您没有指定任何内容时,JSF 在生命周期内自动为组件生成 ID。如果您不想要此功能,请单独为所有组件设置 id 并为<h:form> 设置 id 也可以避免这种情况。

您自己设置 id 将在基于 javascript 的验证中为您提供更多帮助,其中字段的值是使用 id 派生的

【讨论】:

【参考方案2】:

ID 生成将取决于实现。我的意思是,您使用的任何 JSF 实现都将具有一种机制,用于根据对唯一标识“足够好”的变量生成 ID。可能:类名、html元素名等......

您可能需要检查参考实现的source code。

【讨论】:

【参考方案3】:

如果未设置组件的id,则实现为generated。

发送到页面的id 属性值为client identifier。这是使用链接中定义的规则构建的,并将包括父 NamingContainer ids 和可能的视图命名空间。

您可以阅读有关使用 JSF 客户端标识符 here 的更多信息。

【讨论】:

感谢指点!关于 id 多久更改一次的任何想法?我正在尝试构建一些依赖 id 选择器的 Selenium 测试。 @narko 如果是基于 servlet 的 JSF 应用程序(最常见的形式),它们应该和页面结构一样稳定。 @McDowell,非常感谢您的评论。实际上,我也可以确认这一点,因为我在过去几天观察到了这种行为。

以上是关于Java Server Faces JSF - 谁负责自动生成的 id?的主要内容,如果未能解决你的问题,请参考以下文章

将基于 Maven 的 JSF 项目部署到 Tomcat 会导致 java.lang.ClassNotFoundException:javax.faces.webapp.FacesServlet [重

java.lang.ClassNotFoundException:javax.faces.webapp.FacesServlet

JSF -- 过滤 javax.faces.resource 文本替换

什么决定了 JSF 版本?容器还是faces-config?

没有 /faces/ 就无法访问 JSF2 应用程序

JSF 2 中 faces-config.xml 的用途是啥?