org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 8): 属性或字段

Posted

技术标签:

【中文标题】org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 8): 属性或字段【英文标题】:org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 8): Property or field 【发布时间】:2017-02-21 19:07:40 【问题描述】:

我正在使用带有 Thymeleaf 的 spring boot ,jpa 编写示例代码。这是我的代码,我可以看到数据到达 Controller 但由于以下异常而无法显示。非常感谢您的帮助。

Controller:

@Controller
@RequestMapping("/account")
public class AccountController 

    @Autowired
    AccountRepository accountRepository;

    @RequestMapping("/")
    public String list(ModelMap modelMap)
        List<Account> accounts = (List<Account>) accountRepository.findAll();
        modelMap.put("accounts", accounts);
        //return accountRepository.findAll();
        return "account";
    

Entity:

@Entity
public class Account 

    @Id
    @GeneratedValue
    private Integer accountId;

    private String name;

    private String accType;

    public Integer getAccountId() 
        return accountId;
    

    public String getName() 
        return name;
    

    public String getAccType() 
        return accType;
    

    public Account(Integer accountId, String name, String accType) 
        super();
        this.accountId = accountId;
        this.name = name;
        this.accType = accType;
    

account.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="ISO-8859-1"/>
<title>Insert title here</title>
</head>
<body>
<h1> Account Management</h1>
    <table border="2">
        <tr>
            <th>Account Id</th>
            <th>Name</th>
            <th>Account Type</th>
        </tr>

        <tr th:each="account : accounts">
            <td th:text="$account.accountId"/>
            <td th:text="$account.name"/>
            <td th:text="$account.accType"/>
        </tr>
    </table>
    <a href="/">Back</a>
</body>
</html>


Exception Stack trace:

2016-10-12 14:51:56.263 ERROR 32572 --- [nio-8080-exec-1] org.thymeleaf.TemplateEngine             : [THYMELEAF][http-nio-8080-exec-1] Exception processing template "account": Exception evaluating SpringEL expression: "account.accountId" (account:17)
2016-10-12 14:51:56.269 ERROR 32572 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "account.accountId" (account:17)] with root cause

org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 8): Property or field 'accountId' cannot be found on object of type 'java.lang.String' - maybe not public?
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:224) ~[spring-expression-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:94) ~[spring-expression-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.access$000(PropertyOrFieldReference.java:46) ~[spring-expression-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    at org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue(PropertyOrFieldReference.java:374) ~[spring-expression-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:88) ~[spring-expression-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:120) ~[spring-expression-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:267) ~[spring-expression-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    at org.thymeleaf.spring4.expression.SpelVariableExpressionEvaluator.evaluate(SpelVariableExpressionEvaluator.java:139) ~[thymeleaf-spring4-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.thymeleaf.standard.expression.VariableExpression.executeVariable(VariableExpression.java:154) ~[thymeleaf-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:59) ~[thymeleaf-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.thymeleaf.standard.expression.Expression.execute(Expression.java:103) ~[thymeleaf-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.thymeleaf.standard.expression.Expression.execute(Expression.java:133) ~[thymeleaf-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.thymeleaf.standard.expression.Expression.execute(Expression.java:120) ~[thymeleaf-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.thymeleaf.standard.processor.attr.AbstractStandardTextChildModifierAttrProcessor.getText(AbstractStandardTextChildModifierAttrProcessor.java:68) ~[thymeleaf-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.thymeleaf.processor.attr.AbstractTextChildModifierAttrProcessor.getModifiedChildren(AbstractTextChildModifierAttrProcessor.java:59) ~[thymeleaf-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.thymeleaf.processor.attr.AbstractChildrenModifierAttrProcessor.processAttribute(AbstractChildrenModifierAttrProcessor.java:59) ~[thymeleaf-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.thymeleaf.processor.attr.AbstractAttrProcessor.doProcess(AbstractAttrProcessor.java:87) ~[thymeleaf-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212) ~[thymeleaf-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.thymeleaf.dom.Node.applyNextProcessor(Node.java:1017) ~[thymeleaf-2.1.5.RELEASE.jar:2.1.5.RELEASE]

【问题讨论】:

【参考方案1】:

这个:

<tr th:each="account : accounts">

应该是

<tr th:each="account : $accounts">

它不会将“accounts”解析为变量,因此当您稍后使用 $account.accountId 时,它无法正确评估该表达式。

【讨论】:

【参考方案2】:

在我的情况下,我正在对列表进行排序

th:each="company : $#lists.sort(allCompanys)"

但忘记实现Comparable&lt;Company&gt;

【讨论】:

以上是关于org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 8): 属性或字段的主要内容,如果未能解决你的问题,请参考以下文章