2014-05-08 50 views
2

動作類有一個屬性需要驗證。該屬性是一個類(MyClass1),其中一個屬性也是一個類(MyClass2)。Struts 2中的鏈接訪問驗證器

要驗證的每個類都將被多個操作使用,所以我爲每個類定義了「MyClass * -validation.xml」。

我遇到的問題是試圖使用MyClass1中的訪問驗證器來驗證MyClass2。

MyAction-validation.xml中

<validators> 
    <field name="class1"> 
     <field-validator type="visitor"> 
      <message></message> 
     </field-validator> 
    </field> 
</validators> 

MyClass1的-validation.xml中

<validators> 
    <field name="class2"> 
     <field-validator type="visitor"> 
      <message></message> 
     </field-validator> 
    </field> 
</validators> 

MyClass2-validation.xml中

<validators> 
    <field name="myInt"> 
     <field-validator type="conversion"> 
      <message>myInt conversion</message> 
     </field-validator> 
    </field> 
</validators> 

如果我使用field class.class2.myInt =「a」提交表單,fieldErrors()不包含轉換錯誤,正如我的預期。

是否可以無限期鏈接訪客驗證器,或者是最高級別的訪問者級別?如果可能的話,我做錯了什麼?


不良(在我看來)的解決方案/解決方法:由於我無法弄清楚我在做什麼錯了,我終於試過鏈從MyClass1的-validation.xml來MyClass2-validation.xml中的驗證,而是改變MyAction-validation.xml中的定義:()fieldErrors(現在包含轉換錯誤)

<validators> 
    <field name="class1.class2"> 
     <field-validator type="visitor"> 
      <message></message> 
     </field-validator> 
    </field> 
    <field name="class1"> 
     <field-validator type="visitor"> 
      <message></message> 
     </field-validator> 
    </field> 
</validators> 

這種變化解決的問題,但我會很喜歡能鏈作爲校驗是我最初的意圖。

+0

+1,很好的問題。解決方法是相同的,我想在閱讀你的問題的幾行後寫在一個答案:) –

+0

我已經創建了這個jira問題:https://issues.apache.org/jira/browse/WW-4346 。 –

回答

2

是的,它實際上有可能visitors驗證器無限期地。驗證程序conversion獲取完整的字段名稱並檢查轉換錯誤映射是否包含該名稱。問題是,如果有多個鏈接visitor驗證程序conversion驗證程序無法獲得實際的完整字段名稱(例如class1.class2.myInt)。

您可以輕鬆地測試MyClass2-validation.xml文件(例如int驗證)鏈接visitor驗證與其他一些驗證。

+0

酷...所以它已經默認可鏈接,並且唯一的驗證器在通過訪問者鏈接時不工作是「轉換」嗎? –

+0

@AndreaLigios:不能肯定它是唯一的,但似乎是這樣。 :) –

+0

有趣的是,知道其他包裝驗證工作,不幸的是,這一個不,但至少我有一個解決辦法。謝謝! – Matt