【发布时间】: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-value 从 cardNumber 更改为 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