無法區分ConverterException
和ValidatorException
,只有UIInput#isValid()
在手中。理論上,您可以檢查並測試faces消息以查看它是否代表轉換或驗證錯誤,但這不是一種可靠的方法,當然不是在本地化時。
另一方面,可以使用相同的參數名稱聲明多個視圖參數。您不一定需要指定value
將其設置爲模型值。
下面是根據您的描述爲例,注意,模型值僅在最後一集:
<o:viewParam name="foo">
<f:converter converterId="yourFooConverter" />
<o:viewParamValidationFailed sendError="400" />
</o:viewParam>
<o:viewParam name="foo">
<f:converter converterId="yourFooConverter" />
<f:validateRequired />
<o:viewParamValidationFailed sendError="404" />
</o:viewParam>
<o:viewParam name="foo" value="#{bean.foo}">
<f:converter converterId="yourFooConverter" />
<f:validateRequired />
<f:validator validatorId="yourRestrictedAccessValidator" />
<o:viewParamValidationFailed sendError="403" />
</o:viewParam>
爲了避免調用數據庫的每次轉換昂貴的工作,讓YourFooConverter
執行商店轉換後的值作爲FacesContext
的自定義屬性,然後在每次傳遞時檢查它。
它的工作原理。做得好。我已經嘗試過這種方法,但錯過了在每個viewParam標記處理器中指定轉換器。 – darefilz 2014-11-08 12:26:10
我剛剛寫了這個優化(存儲轉換後的值作爲自定義屬性),但顯然給定的'UIComponent'是每個過程的'o:viewParam',因此不一致。我只是將該值添加到給定的'FacesContext'中,它在所有測試中都能正常工作。有沒有理由不這樣做? – darefilz 2014-11-19 21:34:19