2011-01-25 2 views
5

При вызове Spring Validation из Eclipse я получаю много ошибок, когда хочу вернуть перечисление с использованием неявного метода Enable «valueOf».Весна, бобы и значение enumOf

Например:

<bean id="docFamily" class="...DocFamily" factory-method="valueOf"> 
    <constructor-arg> 
     <value>LOGY</value> 
    </constructor-arg> 
</bean> 

имеет Eclipse, говорил мне:

Non-статический метод фабрики 'valueOf' с 1 аргументы не найдены на заводе класса бина ...

Однако, насколько я понимаю из документации:

BeanWrapperImpl поддерживает JDK 1.5 перечислений и классы перечислений старого стиля: String значения будут рассматриваться как значения перечисления имена

Так выше должны работать правильно? (btw является «конструктором-arg» правильным тегом в этом случае, не должен ли он быть «method-arg»?).

Почему «Проверка» Eclipse/Spring дает мне это сообщение об ошибке?

ответ

4

Enum.valueOf() имеет два аргумента:

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 

Поэтому искомое определение может выглядеть следующим образом:

<bean id="docFamily" class="java.lang.Enum" factory-method="valueOf"> 
    <constructor-arg index = "0"><value>...DocFamily</value></constructor-arg> 
    <constructor-arg index = "1"><value>LOGY</value></constructor-arg> 
</bean> 

Однако, что-то, как это может быть более элегантное решение:

<util:constant id = "docFamily" static-field = "...DocFamily.LOGY" /> 
+0

Согласен, но OP не пытается использовать 'java.lang.Enum.valueOf()'. Я скорее понимаю, что это 'DocFamily.valueOf()', который пытается вызываться. –

+1

@Grzegorz Oledzki: но DocFamily - это Enum – Gugussee

0

Я просто попытался использовать его вот так:

<bean id="docFamily" class="...DocFamily" factory-method="valueOf"> 
    <constructor-arg type="java.lang.String" value="LOGY"/> 
</bean> 

, и он работал как шарм. Это работает для вас?

Смежные вопросы