我已经尽了一切可能,但我得到的解决方案我自己并不喜欢它。
我正在使用Spring Framework和Thymeleaf。在我的实体类中,我将我的属性声明为私有,如下所示
public class Subscriber {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Column(name= "firstname")
private String firstname;
@Column(name= "lastname")
private String lastname;
@Column(name= "email")
private String email;
public Subscriber(){
}
}
在Thymeleaf,我正在使用th:tyo从我的数据库中获取数据,如下所示:
<tr th:each="subscriber : ${subscribers}">
<td th:text="${subscriber.firstname} + ' ' + ${subscriber.lastname}"></td>
<td th:text="${subscriber.email}"></td>
当我运行代码时,我在运行时遇到以下错误:
org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'firstname' cannot be found on object of type '' - maybe not public?
现在,如果我将修改器更改为public,一切正常,我的数据就会显示出来。但是,我不认为这是建模实体的最佳方式。我需要警惕将来可能访问我的代码库的第三方,从而阻止他们修改我的代码并对我造成损害。
因此,我需要有更多经验的人提供帮助,无需将修饰符更改为私有。
感谢任何帮助。
答案 0 :(得分:1)
您可以通过将私有声音更改为公共声音来获取属性,例如您的吸气剂有问题。您应该在Subscriber类中检查您的getter和setter。
如果getter是getFirstName(),则它将无法正常工作,因为类中的属性名称是“ firstname”而不是firstName。
@Entity
@Table(name= "subscribers")
public class Subscriber {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Column(name= "firstname")
private String firstname;
@Column(name= "lastname")
private String lastname;
@Column(name= "email")
private String email;
public long getId(){
return this.id;
}
public void setId(long id){
this.id = id;
}
//This should not be getFirstName()
public String getFirstname(){
return this.firstname;
}
public void setFirstname(String fistname){
this.firstname = firstname;
}
//This should not be getLastName()
public String getLastname(){
return this.lastname;
}
public void setLastname(String lastname){
this.lastname = lastname;
}
public String getEmail(){
return this.email;
}
public void setEmail(String email){
this.email = email;
}
public Subscriber(){
}
}
在百里香中称呼这些
<tr th:each="subscriber : ${subscribers}">
<td th:text="${subscriber.firstname} + ' ' + ${subscriber.lastname}"></td>
<td th:text="${subscriber.email}"></td>
我还没有测试这些,但是它们应该可以工作。
答案 1 :(得分:0)
有点奇怪,如果你有公共字段范围,它可以工作。但我所看到的是你的表达不正确。
尝试使用<td th:text="${subscriber.firstname + ' ' + subscriber.lastname}"></td>
答案 2 :(得分:0)
Thymeleaf在视图层中使用getter方法。当您说subscriber.firstName
时,它将调用subscriber.getFirstName()
。因此,在public
类中具有Subscriber
访问修饰符的吸气剂。