Пружина MVC Преобразователь вообще не стреляет - PullRequest
0 голосов
/ 29 января 2020

Я БЫЛ ПОИСК ЧАСОВ И НАЙДЕН НЕСКОЛЬКО ПОХОЖИХ ВОПРОСОВ, НО МНЕ РЕШЕНИЕ НЕ РАБОТАЛО.

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

class A {
   // Primitive properties, getters and setters
}

class B {
   // Primitive properties, getters and setters
   private A a;
}

Таким образом, входные данные формы принадлежат B, что является моим ModelAttribute. Этот класс также имеет ссылку на A, что означает, что форма имеет выбор (с использованием пружинных форм), содержащий A экземпляров. Это мой JSP код:

<c:url var="newB" value="/newB" />
<form:form action="${newB}" method="POST" modelAttribute="b">
    <table>
        <tr>
            <td><form:label path="">B Property 1: </form:label></td>
            <td><form:input path="prop1"/></td>
        </tr>
        <tr>
            <td><form:label path="">B Property 2: </form:label></td>
            <td><form:input path="prop2"/></td>
        </tr>
        <tr>
            <td><form:label path="">A : </form:label></td>
            <td><form:select path="a.prop1">
                <form:options items="${alist}" itemValue="prop1" itemLabel="prop2" />
            </form:select></td>
        </tr>
    </table>
    <form:button>SUBMIT</form:button>
</form:form>

<form:select> гарантирует, что я только a внедряю, используя его свойство prop1, так как весь объект превращается в строку, мне нужно сделать это так ( В противном случае, если есть лучший способ, это также будет оценено ). Поэтому для того, чтобы я также внедрил другие свойства, я попытался использовать класс Converter, который принимает prop1 (идентификатор, если вы, который) из a и находит объект в моем хранилище. Примерно так:

public class StringToAConverter implements Converter<String, A> {

    @Autowired(required = true)
    private MyService service;

    @Override
    public A convert(String prop1) {
        return service.retrieve(Integer.parseInt(prop1));
    }
}

А это моя XML конфигурация:

<mvc:annotation-driven conversion-service="conversionService" />
<beans:bean
    id="conversionService"
    class="org.springframework.context.support.ConversionServiceFactoryBean">
    <beans:property name="converters">
        <beans:list>
            <beans:bean class="myproject.converters.StringToAConverter"/>
        </beans:list>
    </beans:property>
</beans:bean>

Так почему же это не работает? Что я делаю не так?

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