我正在将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-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。
答案 0 :(得分:1)
就像@Metroids指出的那样,您可能缺少cardNumber
字段的getter / setter方法,尤其是它的getter方法。如果您有一个吸气剂,请检查该吸气剂是否遵循POJO约定并且是否公开。
public int getCardNumber()
{
return cardNumber;
}
如果拼写不是getCardNumber()
的拼写,即使您可以在控制器中调用该方法来获取值,则thymeleaf也不能这样做,因为它依赖于POJO约定来调用变量属性。我希望这会有所帮助。