Thymeleaf - Исключительная ситуация при вычислении выражения SpringEL для переменной объекта - PullRequest
0 голосов
/ 24 августа 2018

Я втыкаю значение в скрытый ввод с помощью Thymeleaf и продолжаю получать сообщение об ошибке Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "receiptInquirySearchForm.cardNumber?:''" (template: "results.html" - line 14, col 44)
Я пытался поместить ? после receiptInquirySearchForm, после cardNumber и после обоих.Я продолжаю получать ту же ошибку в этой строке.

Вот строка 14:

<input type="hidden" name="cardNumber" data-th-value="${receiptInquirySearchForm.cardNumber?}" />

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

<input type="hidden" name="tokenId" data-th-value="${receiptInquirySearchForm.tokenId}" />
<input type="hidden" name="accountNumber" data-th-value="${receiptInquirySearchForm.accountNumber}" />
<input type="hidden" name="sku" data-th-value="${receiptInquirySearchForm.sku}" />

Когда я изменяю data-th-value с cardNumber на tokenId, он проходит через этот блок скрытых входов, поэтому любая другая строка работает нормально.

UPDATE Я нашел еще одно более описательное сообщение об ошибке ниже.Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'cardNumber' cannot be found on object of type '...web.form.ReceiptInquirySearchForm' - maybe not public or not valid?

Как я могу проверить это в коде?Я знаю, иногда это будет там, но, по-видимому, в данном случае это не так.

Они делали это в Velocity так:

<input type="hidden" name="cardNumber" value="$!receiptInquirySearchForm.cardNumber" />

В восклицательном коде правильно обрабатывается возможный отсутствующий или нулевой номер карты.

1 Ответ

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

Точно так же, как указал @Metroids, вам, вероятно, не хватает геттеров / сеттеров для поля cardNumber особенно для него.Если у вас есть для него геттер, убедитесь, что он соблюдает соглашение POJO и является общедоступным;

public int getCardNumber() { return cardNumber; }

Если орфография не похожа на getCardNumber(), даже если вы можете вызвать метод в контроллере, чтобы получить значение, тимилеф не может этого сделать, потому что он полагается на POJOсоглашение, чтобы иметь возможность вызывать свойства переменной.Надеюсь, это поможет.

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