【问题标题】:Thymeleaf - Exception evaluating SpringEL expression on object variableThymeleaf - 在对象变量上评估 SpringEL 表达式的异常
【发布时间】:2018-08-24 14:10:53
【问题描述】:

我正在使用 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-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。

【问题讨论】:

  • 您可能缺少 cardNumber 字段的公共 getter/setter。除非你真的为receiptInquirySearchForm 传递不同的类(有时cardNumber 有getter 和setter,有时没有——这很奇怪。)
  • 在上一页,用户可以选择“信用卡”或“支票”,然后转到相应的页面填写详细信息。当他们提交时,两个页面都会将他们带到同一个结果页面。很明显,信用卡页面会带上卡号,而支票页面会带上路由和帐号。我猜我需要在检查时为 cardNumber 发送空白数字,反之亦然?
  • 原来这是一个我们不再使用的旧字段,因此从未在控制器中设置它。所以我将删除它并继续。仍然很高兴知道 Thymeleaf 是否有办法解释这种可能性。

标签: thymeleaf


【解决方案1】:

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

public int getCardNumber() { return cardNumber; }

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

【讨论】:

    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 2019-05-24
    • 2019-08-30
    • 1970-01-01
    相关资源
    最近更新 更多