th: отключенные объекты в Thymeleaf - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть базовое приложение SpringBoot 2.0.5.RELEASE.Используя Spring Initializer, JPA, встроенный Tomcat, шаблонизатор Thymeleaf и пакет в качестве исполняемого файла JAR.

У меня есть объект select, который доступен только для чтения,

<select id="selectInvoiceId" th:field="*{invoice}" th:disabled="${resto.id != null}" >
    <option value="0">PLEASE SELECT AN INVOICE</option>
    <option th:each="invoice : ${invoices}" 
            th:value="${invoice.id}" 
            th:text="${invoice.symbol}">
    </option>
</select>

в контроллере, который у меня есть

@RequestMapping(value = { "/save" }, method = RequestMethod.POST)
public String saveWallet(@Valid @ModelAttribute("wallet") WalletPayload walletPayload, 
    BindingResult bindingResult) {
    ..
}

и в объекте WalletPayload у меня есть:

@NotNull
private Invoice invoice;

тогда я всегда получаю ошибку при проверке, потому что счет-фактура является нулевым, я хотел бы знать, есть ли обходной путьдля объектов только для чтения

Я пробовал это, но у меня все еще есть ошибка:

@RequestMapping(value = { "/save" }, method = RequestMethod.POST)
    public String saveWallet(@Valid @ModelAttribute("wallet") WalletPayload walletPayload,
            BindingResult bindingResult) {


        LOG.debug("WalletPayload walletPayload [ " + walletPayload + " ]");

        if (walletPayload.getId() != null) {
            Invoice fakeInvoine = new Invoice("fake-inv");
            fakeInvoice.setId((long)-1);
            walletPayload.setInvoice(fakeInvoice);
        }


        if (bindingResult.hasErrors()) {
            return serverContextPath + WALLET_LIST_VIEW_NAME;
        }

Я также пытался использовать только для чтения, но он не появляется в качестве опции на выборкеобъект

enter image description here

Ответы [ 3 ]

0 голосов
/ 23 сентября 2018

Используйте этот подход:

Когда элемент select отключен, добавьте в форму скрытый элемент, который устанавливает поддельный счет-фактуру, чтобы метод saveWallet получил walletPayload с ненулевым поддельным счетом.

0 голосов
/ 25 сентября 2018

Вы должны использовать readonly, если хотите, чтобы значения отправлялись, а пользователь не может их редактировать.

Существует небольшая разница между использованием disabled и readonly

Сравнение

  • readonly элементы недоступны для редактирования, но будут отправлены при отправке.
  • disabled элементы не редактируются и не отправляются после отправки.
  • readonly предметы могут фокусироваться, а disabled один - нет.
0 голосов
/ 23 сентября 2018

Если объект walletPayload содержит пустой счет, установите ненулевой счет в методе saveWallet перед тем, как сделать walletPayload постоянным.

Возможно, вы можете определить счет как «пустой счет» (установив его идентификатор).как отрицательное значение или другая особая отметка), поэтому вы можете игнорировать ее, когда она появится позже.

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