Spring MVC создает дочерний объект при отправке формы, когда он не должен - PullRequest
0 голосов
/ 08 ноября 2018

У меня проблема с созданием дочернего объекта, даже если моя форма не указывает, что он должен быть создан. Проблема, которую я получаю, заключается в том, что при отправке формы возникают ошибки поля проверки с указанием, что фамилия и имя вторичного пользователя отсутствуют.

В идеале, я хочу, чтобы вторичный код оставался пустым и, следовательно, не проверялся при отправке формы.

HTML-форма (для простоты):

<form th:action="@{/quotes/save}" th:object="${quote}">
    <input type="text" th:field="*{primary.lastName}" />
    <input type="text" th:field="*{primary.firstName}" />
</form>

Объект цитаты:

@Entity    
public class Quote {
    @ManyToOne
    @Valid
    @NotNull(groups={Quote.ValidationPrimary.class})
    private Person primary;

    @ManyToOne
    @Valid
    private Person secondary;
}

Объект Person:

@Entity
public class Person {
    @NotEmpty
    private String lastName;

    @NotEmpty
    private String firstName;
}

Контроллер Quote:

@Controller
public class QuoteController {

    @PostMapping("/quotes/save")
    public String save(@ModelAttribute @Validated({Quote.ValidationPrimary.class}) Quote quote, BindingResult bindingResult) {
        quote.getPrimary(); // this contains a Person object... as expected
        quote.getSecondary(); // this also contains a Person object... which is NOT EXPECTED
        ...
    }
}

1 Ответ

0 голосов
/ 08 ноября 2018

Не используйте имя при использовании th:object, используйте вместо этого th:field. И ваш контроллер немного отличается от того, что я обычно видел. Я бы порекомендовал изменить его для следующего кода.

Форма

<form th:action="@{/quotes/save}" th:object="${quote}">
    <input type="text" th:field="*{primary.lastName}" />
    <input type="text" th:field="*{primary.firstName}" />
</form>

Контроллер

@PostMapping("/quotes/save")
public String save(@ModelAttribute Quote quote, BindingResult bindingResult) {
        quote.getPrimary(); // this contains a Person object... as expected
        quote.getSecondary(); // this also contains a Person object... which is NOT EXPECTED
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...