2

バッキングBeanの場合:

@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、実際にこれを実装する方法が少しわかりません。それともバグですか?コンバーターを使うのを忘れているようですか?私は何かを誤解しましたか?

4

1 に答える 1

1

チケットのコメントによると、回避策としてタイプコンバーターを明示的に指定できることがわかりました。

あなたは次のようにそれを行うことができます

<pref:fieldComponent text="#{bean.foo}">
    <f:converter converterId="javax.faces.Integer" />
</pref:fieldComponent>

<cc:implementation>
    <h:inputText id="field" value="#{cc.attrs.text}">
        <cc:insertChildren />
    </h:inputText>
</cc:implementation>

または多分

<pref:fieldComponent text="#{bean.foo}" converter="javax.faces.Integer" />

<cc:implementation>
    <h:inputText id="field" value="#{cc.attrs.text}" converter="#{cc.attrs.converter}" />
</cc:implementation>
于 2011-08-12T17:13:08.267 に答える