使用thymelaf并使用javaSpring从java对象获取字符串



我试图用thymelaf从一个java对象中获取一个字符串,并使用javaSpring作为框架,但我得到了一个错误,错误是:

org.springframework.expression.spec.SpelEvaluationException:EL1004E:方法调用:在类型java.lang.String 上找不到方法getSrc((

html代码为:

<div th:each="product: ${products}">
<div class="col-1">
<div class="gallery">
<div th:each="imgg :${product.id}+img">
<p th:text="${imgg.getSrc()}"></p>
</div>
<div class="desc">
<p th:text="${product.name}"></p>
</div>
</div>
</div>
</div>

控制器是:

@GetMapping("/")
public String dashboard(ModelMap model) {
List < CpuProduct > CpuProducts = cpurepo.findAll();
model.put("products", CpuProducts);
CpuProducts.forEach(prod ->{
model.put(prod.getId() + "img", prod.getPhotos());
});
return "index";
}

CpuProduct类为:

package com.deiutz.BuildIT.User.products;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OrderColumn;
@Entity
public class CpuProduct {
private long id;
private double price;
private String description;
private String model;
private String name;
private Set<Image> photos;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public long getId() {
// TODO Auto-generated method stub
return id;
}
public void setId(long id) {
this.id = id;
}
public double getPrice() {
// TODO Auto-generated method stub
return price;
}
public void setPrice(double price) {
this.price = price;
}

public String getDescrpiton() {
return description;
}

public void setDescrpiton(String description) {
this.description = description;
}

public String getModel() {
return model;
}

public void setModel(String model) {
this.model = model;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "product")
@OrderColumn
public Set<Image> getPhotos() {
return this.photos;
}

public void setPhotos(Set<Image> photos) {
this.photos = photos;
}

}

图像类别为:

package com.deiutz.BuildIT.User.products;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class Image {
private long id;
private byte[] foto;
private CpuProduct product;
private String src = "img/" + id;

public byte[] getFoto() {
return foto;
}
public void setFoto(byte[] foto) {
this.foto = foto;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}
@ManyToOne()
public CpuProduct getProduct() {
return product;
}
public void setProduct(CpuProduct product) {
this.product = product;
}
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
}

我不确定是什么导致了您的问题。您可能无法通过在模板中添加两个字符串来访问模型映射中的变量,它只会将其连接到字符串中。

另一方面,我可以给你们一个解决方案(一个更清洁的(。简而言之,让我们在一个模型中放一个按产品id映射的照片地图,而不是按包含照片的产品id放"n"个模型。

model.put("products", cpuProducts);
Map<Integer, List<Photo>> photosByProduct = cpuProducts.stream()
.collect(Collectors.toMap(CpuProduct::getId, CpuProduct::getPhotos));
//          Or using forEach
//
//          Map<Integer, List<Photo>> photosByProduct = new HashMap<>();
//          cpuProducts.forEach(cpuProduct -> {
//              photosByProduct.put(cpuProduct.getId(), cpuProduct.getPhotos())
//          });
model.put("photos", photosByProduct);
<div th:each="product: ${products}">
<div class="col-1">
<div class="gallery">
<div th:each="photo: ${photos.get(product.id)}">
<p th:text="${photo.src}"></p>
</div>
<div class="desc">
<p th:text="${product.name}"></p>
</div>
</div>
</div>
</div>

最新更新