这个错误已经困扰了一段时间。
EL1008E:在类型为"java.lang.String"的对象上找不到属性或字段"applicationName"-可能不是公共的或无效的?
我试图通过thymelaf从数据库中获取记录,但总是收到这个错误。我想我已经宣布了所有需要的东西。
这是我的代码
型号
@Entity
@Table(name = "sms_alert", schema = "public")
public class SmsAlert {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "sms_id")
private Long smsId;
@Column(name = "application_name")
private String applicationName;
@Column(name = "sms_flag")
private String smsFlag;
public SmsAlert() {
}
public SmsAlert(String applicationName, String smsFlag) {
super();
this.applicationName = applicationName;
this.smsFlag = smsFlag;
}
public Long getSmsId() {
return smsId;
}
public void setSmsId(Long smsId) {
this.smsId = smsId;
}
public String getApplicationName() {
return applicationName;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public String getSmsFlag() {
return smsFlag;
}
public void setSmsFlag(String smsFlag) {
this.smsFlag = smsFlag;
}
}
控制器
@GetMapping(value = "/smsAlert/{applicationName}")
public String viewApplicationSmsAlert(@PathVariable("applicationName") String applicationName, Model model) {
System.out.println(applicationName);
model.addAttribute("sms", smsService.findSmsFlagByAppName(applicationName));
return "test";
}
存储库
@Repository
public interface SmsRepository extends JpaRepository<SmsAlert, Long> {
@Query(value = "SELECT s.application_name, s.sms_flag FROM public.sms_alert s WHERE s.application_name= :applicationName ", nativeQuery = true)
public String findSmsFlagByAppName(@Param("applicationName") String applicationName);
服务
@Service
public class SmsService {
@Autowired
private SmsRepository smsRepository;
public List<SmsAlert> findAll() {
return smsRepository.findAll();
}
public String findSmsFlagByAppName(String applicationName) {
return smsRepository.findSmsFlagByAppName(applicationName);
}
public void updateSmsFlag(String applicationName, String smsFlag) {
smsRepository.updateSmsFlag(applicationName, smsFlag);
}
}
HTML文件
<body>
<div id="content">
<div>
<table class="table table-hover table-striped" id="invTable">
<thead>
<tr class="table-primary">
<th id="terminalId">Terminal ID</th>
</tr>
</thead>
<tbody>
<tr th:each="sms : ${sms}">
<td th:text="${sms.applicationName}"></td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
SmsRepository
中的findSmsFlagByAppName
方法返回一个String
。您的控制器正在将String
放入变量名为sms
的模型中。然后在您的视图中,您引用的是${sms.applicationName}
,它正试图评估该String
上的applicationName
属性,而该属性当然不存在。
你可以通过多种方式消除这个错误。一种是,用applicationName
填充模型作为String
,然后在视图中简单地引用该String
。
另一种选择是重新处理findSmsFlagByAppName
方法以返回SmsAlert
。