2012-04-26 11 views
1

除非你有必要這樣做,否則最好不要標記表單組件(或任何其他組件)如果你想能夠可靠地區分一個組件和另一個組件?是不是爲典型的做法提供了JSF 2.0表單的ID?

當我看到參考組件的例子時,我總是看到它們帶有前面的冒號,例如「:對話框」而不是「對話框」或「窗體:對話框」。是不是命名錶單然後使用前面的冒號指定組件是最佳實踐?

回答

3

指定表格的id,因爲您現在不需要通過客戶端ID來引用它,那麼從技術角度而言,忽略它就不會造成傷害,因爲JSF將以任何方式自動生成一個。

從ID-以下形式內,例如,可以隨時引用父形式@form<f:ajax>executerender屬性以信號通知要提交和/或渲染整個母體形式。

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

但是,如果你需要,例如引用另一個形式或阿賈克斯其子組件之一渲染,那麼你應該給這種形式固定ID,這樣你就可以通過客戶端來引用它ID。

這是我們在現實世界中的項目正在經歷另一個原因是,網絡自動化單元測試軟件如Selenium確實需要有一個固定的ID形式,因爲它需要找到輸入字段,並通過他們的name屬性提交按鈕,其也是基於JSF表單ID編寫的。如果未指定JSF表單ID,則每個部署/請求上的輸入字段名稱都是不可預測的,因此無法測試。

總而言之,「最佳實踐」基本上是:「只有當你需要它時」。我自己剛剛習慣了總是指定了NamingContainer,UIInputUICommand組件的ID。 「你永遠不會知道」。

+0

可以打電話給Web單元測試軟件 - 我們正在使用其中的一個,以便可以爲我們做出決定。 – BestPractices 2012-04-26 19:49:45

1

您的組件ID將如下所示: :namingContainer:myComponent。其中第一個「:」告訴JSF您 想如果不這樣做,開始尋找在UIViewRoot實例的組件,或 組件樹的最高層

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

+0

您是否知道從組件樹頂部開始是否存在任何不平凡的性能問題?順便說一句,非常有用的鏈接。謝謝! – BestPractices 2012-04-26 19:35:49

+0

不確定,但必須有一定程度的開銷。 – 2012-04-26 19:37:19

相關問題