EL1008E:在类型 'java.lang.String' 的对象上找不到属性或字段'applicationName' - 可能不是公共的或无效的?



这个错误已经困扰了一段时间。

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

相关内容

最新更新