2015-07-01 44 views
0

我已經定義了一個名爲@RequiredWhen的自定義jsr-303驗證器,它與@NotNull類似,但取決於某些條件。在JSF中使用自定義的@RequiredWhen驗證器和必需的字段裝飾器進行Bean驗證

在JSF中,無論何時我使用@NotNull註釋受管Bean屬性,如PrimeFaces <p:outputLabel for="that property">等組件,都會根據需要識別該屬性並用星號標記該屬性。如果@RequiredWhen -annotation中的條件成立,是否可以實現或配置我的自定義驗證程序,以便也顯示星號?非常感謝。

我使用,

  • Java EE 6個的
  • 的GlassFish 3.1.2
  • 鑽嘴魚科2.1.29
  • PrimeFaces 5.2

回答

0

至於我可以看到現在答案是否定的:通過配置或實現自定義驗證器來顯示asterix是不可能的。查看primefaces的來源,對@NotNull的檢查是硬編碼的,沒有回調來檢查其他註釋。

作爲第一個解決辦法,我們增加了一個新的bean,檢查輸入字段爲我們定製註釋,如

<p:inputText id="test" value="#{uiController.data}" 
     required="#{ContextValidatorDelegate.isRequired('data')}"/> 

但經過一段仔細看看我們刪除了委託。我們的自定義驗證程序中的條件依賴於用戶可以在與驗證的屬性相同的對話框中修改的屬性。所以我們的驗證器確實是一些類級別的驗證器。因此我們不能使用在驗證階段處理的必需屬性。我們需要模型bean中的完整用戶輸入。只有在更新模型階段之後,類級驗證纔有意義。

+0

爲什麼不創建PrimeFaces類的增強版本?一個只是檢查你的註釋。這是Java,你可以很容易地覆蓋它 – Kukeltje

+0

那麼,我們的客戶買了primefaces pro,支持的版本。因此,「在」primefaces中的變化是不行的。所以我們正在尋找一些「外部」的方法來實現我們的要求。另一方面,一旦我們認識到我們實際上正在使用類級別驗證程序來處理用戶在其對話框中更改驗證結果的條件時,我們認爲該asterix具有誤導性。我們放棄了這個功能。 – frifle