在“ java.util.Optional”类型的对象上找不到属性或字段“名称”-可能不是公共的或无效的?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在“ java.util.Optional”类型的对象上找不到属性或字段“名称”-可能不是公共的或无效的?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3116字,纯文字阅读大概需要5分钟。
内容图文
单击房间名称时,我想显示“房间详细信息”.但是我有一个问题,我不知道为什么.我使用Spring MVC,Spring Boot,Spring Data和Thymeleaf
org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'name' cannot be found on object of type 'java.util.Optional' - maybe not public or not valid?
我认为问题是我使用Spring Data findById()时服务中的Optional
这是我的代码
房间模型
@Entity
@Table(name ="room")
public class Room implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID_room", nullable = false)
private String id;
@Column(name = "name_room", nullable = false)
private String name;
@Column(name = "Description")
private String describe;
@Column(name = "ID_status")
private String status;
@Column(name = "room_image")
private String image;
public Room() {
super();
}
public Room(String id, String name, String describe, String status,String image) {
super();
this.id = id;
this.name = name;
this.describe = describe;
this.status = status;
this.image = image;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
}
客房服务
public interface RoomService {
Optional<Room> findOne(String id);
}
客房服务工具
public class RoomServiceImpl implements RoomService {
@Autowired
private RoomRepository roomRepository;
@Override
public Optional<Room> findOne(String id) {
return roomRepository.findById(id);
}
}
RomController
@GetMapping("/room/{id}/detail")
public String detail(@PathVariable String id, Model model) {
model.addAttribute("room", romService.findOne(id));
return "roomDetail";
}
roomDetail.html
<div class="col-md-7 single-top-in">
<div class="single-para">
<h4><tr th:text="${room.name}"></h4>
<div class="para-grid">
<span class="add-to">$32.8</span>
<a href="#" class="hvr-shutter-in-vertical cart-to">Add to Cart</a>
<div class="clearfix"></div>
</div>
<h5>100 items in stock</h5>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
解决方法:
org.springframework.expression.spel.SpelEvaluationException: EL1008E:
Property or field ‘name’ cannot be found on object of type
‘java.util.Optional’ – maybe not public or not valid?
意味着Spring不能插值模板中使用的name属性:
<h4><tr th:text="${room.name}"></h4>
可以预期,因为您通过了Optional< Room>对象传递给MVC模型,而不是传递Room对象.
您必须先解开Optional中包含的对象,然后才能将其添加到模型中.
例如 :
romService.findOne(id).ifPresent(o -> model.addAttribute("room", o));
内容总结
以上是互联网集市为您收集整理的在“ java.util.Optional”类型的对象上找不到属性或字段“名称”-可能不是公共的或无效的?全部内容,希望文章能够帮你解决在“ java.util.Optional”类型的对象上找不到属性或字段“名称”-可能不是公共的或无效的?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。