现在这个错误困扰了一段时间。
EL1008E:在类型'java.lang.String'的对象上找不到属性或字段'applicationName'-可能不是公共的或无效的吗?
我试图通过百里香从数据库中获取记录,但总是会收到此错误。我想我已经声明了所有需要的东西。
这是我的代码
型号
@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>
答案 0 :(得分:1)
findSmsFlagByAppName
中的SmsRepository
方法返回一个String
。您的控制器正在将String
放入变量名称为sms
的模型中。然后,在您看来,您引用的是${sms.applicationName}
,它正在尝试评估该applicationName
上的String
属性,该属性当然不存在。
您可以通过多种方法使错误消失。一种是,用applicationName
作为String
填充模型,然后在视图中简单地引用那个String
。
另一种选择是修改findSmsFlagByAppName
方法以返回SmsAlert
。