1

最好不要标记表单组件(或任何其他组件),除非您需要这样做,例如,如果您希望能够可靠地区分一个组件与另一个组件?

当我看到参考组件的示例时,我总是看到它们带有前面的冒号,例如“:dialog”而不是“dialog”或“form:dialog”。不是命名表单然后使用前面的冒号指定组件是最佳实践吗?

4

2 回答 2

3

如果您没有指定id表单的 ,因为您现在不需要通过客户端 ID 引用它,那么从技术上讲,省略它并没有什么坏处,因为 JSF 会以任何方式自动生成一个。

例如,从无 ID 表单内部,您始终可以引用父表单@form和属性来表示您想要提交和/或呈现整个父表单。executerender<f:ajax>

<f:ajax execute="@form" render="@form" />

但是,如果您需要在 ajax 渲染上引用另​​一个表单或其子组件之一,那么您应该为该表单提供一个固定 ID,以便您能够通过客户端 ID 引用它。

我们在现实世界项目中遇到的另一个原因是,像Selenium这样的自动化 Web 单元测试软件确实需要一个具有固定 ID 的表单,因为它需要通过其name属性找到输入字段并提交按钮,该属性也是基于JSF 表单 ID。如果未指定 JSF 表单 ID,则输入字段名称在每次部署/请求时都是不可预测的,因此无法测试。

总而言之,“最佳实践”基本上是:“仅在需要时”。我自己只是习惯于总是指定NamingContainer,UIInputUICommand组件的 ID。“你永远不会知道”。

于 2012-04-26T19:33:45.377 回答
1

您的组件 ID 类似于 :namingContainer:myComponent。第一个“:”告诉 JSF 你想在 UIViewRoot 实例或组件树的最顶层开始查找组件

阅读http://ocpsoft.org/java/jsf2-java/how-to-jsf-2-0-render-components-outside-of-the-form/

于 2012-04-26T19:33:38.303 回答