Thymeleaf-在对象变量上评估SpringEL表达式的异常

时间:2018-08-24 14:10:54

标签: thymeleaf

我正在将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是一个有效的非null对象,因为我还有其他一些不会引发错误的隐藏输入。

<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-valuecardNumber更改为tokenId时,它越过了隐藏输入块,因此其他所有行都可以正常工作。

更新
我在下面找到了另一个更具描述性的错误消息。
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" />

惊叹号正确处理了可能遗失或空的cardNumber。

1 个答案:

答案 0 :(得分:1)

就像@Metroids指出的那样,您可能缺少cardNumber字段的getter / setter方法,尤其是它的getter方法。如果您有一个吸气剂,请检查该吸气剂是否遵循POJO约定并且是否公开。

public int getCardNumber() { return cardNumber; }

如果拼写不是getCardNumber()的拼写,即使您可以在控制器中调用该方法来获取值,则thymeleaf也不能这样做,因为它依赖于POJO约定来调用变量属性。我希望这会有所帮助。