2
在輔助bean:JSF 2.0:H:複合部件內的inputText失敗,非字符串對象時驗證設定
@Min(3)
Integer foo;
如果我有形式等:
<h:form>
<h:commandButton value="Submit" />
<h:inputText value="#{bean.foo}" />
</h:form>
此工程確定。但是,如果我這樣做
<cc:interface>
<cc:attribute name="text" />
<cc:editableValueHolder name="text" targets="field" />
<cc:interface>
<cc:implementation>
<h:inputText id="field" value="#{cc.attrs.text}" />
</cc:implementation>
,並呼籲這裏面的形式,而不是直接h:inputText
爲:
<!-- <h:inputText value="#{bean.foo}" /> -->
<pref:fieldComponent text="#{bean.foo}" />
但後來我得到:
javax.validation.ValidationException: Unexpected exception during isValid call
at org.hibernate.validator.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:144)
at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:118)
at org.hibernate.validator.metadata.MetaConstraint.validateConstraint(MetaConstraint.java:121)
at org.hibernate.validator.engine.ValidatorImpl.validateValueForGroup(ValidatorImpl.java:655)
...
而根本原因是:
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
at org.hibernate.validator.constraints.impl.MinValidatorForNumber.isValid(MinValidatorForNumber.java:32)
at org.hibernate.validator.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:141)
... 69 more
如果我刪除驗證,它可以工作。另外,如果foo
的類型爲String
,則它也可用於驗證。
我試着玩cc:editableValueHolder
,定義不同類型(也省略了它)和一些其他技巧,但我有點不確定如何實際執行此操作。或者它是一個錯誤?似乎忘記使用轉換器了?我誤解了一些東西嗎?
你」你可以做到這一點總是有最奇怪的問題。之前也沒有見過這個。哪個JSF impl /版本?哪個JSR303 impl /版本?這兩個異常的第一個堆棧跟蹤行是什麼? – BalusC 2011-02-09 11:45:18
幸運的是,SO的善良人總是在那裏幫助:)仍然運行Mojarra 2.0.2,但我也嘗試了最新的2.0.4和2.1.0測試版。我會在這個問題上添加一些堆棧跟蹤... – 2011-02-09 16:38:08