2010-02-27 27 views
3

我在JSF中創建一個表單來保存一個新的實體bean。我將新實體的屬性綁定到輸入元素,使用value屬性,例如其中支持bean是JSF管理的平均值,newEntity是提交的支持bean,其中包含我的實體的新實例。對於屬性值類型(如數字),輸入字段將填充默認值(例如0)。我希望所有的字段最初都是空白的,並在頁面提交時保存回新的實體實例。我想我可以通過使用Integer類型使所有的屬性爲空,但這些值在數據庫中不能爲空,並且我的用戶界面的要求應該指定業務層的形式似乎不正確。我看着這個錯誤的方式?是否可以在Java Server Faces中創建只寫字段綁定?

回答

1

我假設如果這些字段不是可以爲空的,那麼它們是必需的。如果您將required="true"放在該字段上,則在可以分配該值之前驗證應該失敗。這意味着它不會嘗試爲您的屬性分配空值。您可能必須編寫自定義驗證程序才能對某些類型的字段執行此操作。

或者,你可以寫一個轉換器。這個轉換器將不得不將空值轉換爲一些預定的常數,例如-1,你知道這個值是無效的。反之亦然,它必須將-1轉換爲空值才能顯示。然後,在將其發送到業務層之前,必須處理所有無效值。

我已經使用了這兩種方法,但我更喜歡第一種。如果這些字段不是必需的,則它們應該在業務層中可以爲空。

+0

第二種方法對我來說不適用,因爲一般情況下並不總是可以保留代表無效狀態的值。第一種方法的工作原理和前面提到的驗證可以添加到ui中,但是在除數據輸入之外的上下文中,例如當現有對象從數據庫加載出來供參考時,屬性永遠不會爲空,因此看起來字段不爲空數據庫不應該是可空的類型,以便清楚哪些字段可以爲空,哪些不可以。 – Shane 2010-03-01 15:51:17

+0

我的想法是,在編輯新記錄的情況下,我們可以使用這樣一個事實,即我們知道記錄是新的,並且不會在呈現給用戶之前將ui控件同步到實體。也許這可以通過自定義轉換器來完成,這些自定義轉換器會以某種方式收到一個標誌,告訴他們只將數據從控件移動到實體。但是,也許這太複雜了,它應該只使用可空字段並完成它。 – Shane 2010-03-01 15:52:36

+0

採用標誌的自定義轉換器可以工作。主要的缺點是你必須把它放在每個輸入組件上。 – 2010-03-01 17:39:40

相關問題