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 文本替换