Весна обязательна, как это сделать?Невозможно преобразовать значение типа [java.lang.String] в требуемый тип - PullRequest
4 голосов
/ 23 февраля 2012

вот моя форма:

<form:form modelAttribute="fooDTO">
fooCountry: 
<form:select path="country">
  <form:options items="${countries}" itemLabel="shortName" itemValue="id"/> 
</form:select>

вот вспомогательное ПОЖО:

public class FooDTO
{
  private Country country;
 //getters and setters present
}

По умолчанию выбранный параметр соответствует значению страны в fooDTO. Но тогда связывание завершается неудачно при отправке формы - я получаю вышеупомянутую ошибку, я должен зарегистрировать пользовательский редактор в связывателе, или есть более простой метод? Страна в значительной степени соответствует вашим ожиданиям, и это действительно список стран, населенных в контроллере ...

Ответы [ 6 ]

6 голосов
/ 24 февраля 2012

Измените свой путь на <form:select path="country.id">. По крайней мере, это даст вам поле id, заполненное внутри объекта Country после публикации.

3 голосов
/ 24 февраля 2012

Spring 3 представил конвертер SPI, который делает это довольно легко. Посмотрите на 6.5 в документации

Взяв источник из документов и указав в своей стране, вы бы сделали что-то вроде

package my.converter;

final class StringToCountry implements Converter<String, Country> {
    public Country convert(String source) {
        return // whatever you do to get a country from your string
    }
}

Тогда в конфиге xml вы настроите конвертер

<bean id="conversionService"
      class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="my.converter.StringToCountry"/>
        </list>
    </property>
</bean>

Как указывало GriffeyDog, вы можете указать идентификатор страны для выбранного пути, чтобы вы могли получить Страну по идентификатору или чему-то другому вместо того, что возвращается toString () вашего объекта Country.

1 голос
/ 24 февраля 2012

Взгляните на мое решение:

public class CompanyIdToInstanceConverter implements Converter<String, Company> {

@Autowired
CompanyService _companyService;

@Override
public Company convert(final String companyIdStr) {
    return _companyService.find(Long.valueOf(companyIdStr));
}

}

Это преобразует идентификатор компании из избранных в компанию, получая его из БД.

Если у вас есть дополнительные вопросы, пожалуйста, задавайте, потому что сейчасЯ делаю похожие вещи в моем приложении:)

Дополнительно вам нужно добавить в контекст приложения:

<mvc:annotation-driven conversion-service="conversionService" />

<!-- conversion service -->
<bean id="conversionService"
    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <set>toryLabelConverter"></bean>
            <bean class="pl.greenpath.converter.CompanyIdToInstanceConverter"></bean>
        </set>
    </property>
</bean>
1 голос
/ 24 февраля 2012

В Spring вы также можете использовать ConversionService

Вот документация: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/validation.html#format-configuring-FormattingConversionService

Вам потребуется реализовать интерфейс конвертера.

1 голос
/ 23 февраля 2012

Проблема в том, что Spring видит экземпляр String, но знает, что ему нужен экземпляр Country.По умолчанию он не «знает», как перейти от одного к другому.

Я раньше не использовал привязку формы Spring, но это похоже на ту же проблему, с которой можно столкнуться в самой среде Spring.,И в последнем случае вы решаете это путем регистрации PropertyEditor реализации для вашего класса , поэтому я ожидаю, что подобный подход будет работать здесь.

0 голосов
/ 06 февраля 2013

Если вы работаете с приложением MVC, обратитесь к этой ссылке на форуме Spring Source, чтобы узнать, как настроить контекст приложения.Подробности находятся в нижней части потока.

Класс ConverService отличается от MVC, и вам нужно указать mvc: annotation-based (даже если вы не используете аннотации).

http://forum.springsource.org/showthread.php?84003-Converters-no-matching-editors-or-conversion-strategy-found

В документации Spring вы найдете подробности: http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/validation.html#format-configuring-formatting-mvc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...