最好不要标记表单组件(或任何其他组件),除非您需要这样做,例如,如果您希望能够可靠地区分一个组件与另一个组件?
当我看到参考组件的示例时,我总是看到它们带有前面的冒号,例如“:dialog”而不是“dialog”或“form:dialog”。不是命名表单然后使用前面的冒号指定组件是最佳实践吗?
最好不要标记表单组件(或任何其他组件),除非您需要这样做,例如,如果您希望能够可靠地区分一个组件与另一个组件?
当我看到参考组件的示例时,我总是看到它们带有前面的冒号,例如“:dialog”而不是“dialog”或“form:dialog”。不是命名表单然后使用前面的冒号指定组件是最佳实践吗?
如果您没有指定id
表单的 ,因为您现在不需要通过客户端 ID 引用它,那么从技术上讲,省略它并没有什么坏处,因为 JSF 会以任何方式自动生成一个。
例如,从无 ID 表单内部,您始终可以引用父表单@form
和属性来表示您想要提交和/或呈现整个父表单。execute
render
<f:ajax>
<f:ajax execute="@form" render="@form" />
但是,如果您需要在 ajax 渲染上引用另一个表单或其子组件之一,那么您应该为该表单提供一个固定 ID,以便您能够通过客户端 ID 引用它。
我们在现实世界项目中遇到的另一个原因是,像Selenium这样的自动化 Web 单元测试软件确实需要一个具有固定 ID 的表单,因为它需要通过其name
属性找到输入字段并提交按钮,该属性也是基于JSF 表单 ID。如果未指定 JSF 表单 ID,则输入字段名称在每次部署/请求时都是不可预测的,因此无法测试。
总而言之,“最佳实践”基本上是:“仅在需要时”。我自己只是习惯于总是指定NamingContainer
,UIInput
和UICommand
组件的 ID。“你永远不会知道”。
您的组件 ID 类似于 :namingContainer:myComponent。第一个“:”告诉 JSF 你想在 UIViewRoot 实例或组件树的最顶层开始查找组件
阅读http://ocpsoft.org/java/jsf2-java/how-to-jsf-2-0-render-components-outside-of-the-form/