我在Spring MVC中编写了我的第一个webapp。它是动态网页,用户可以通过multipart/form-data
添加壁纸。然后他被重定向到主页,在那里显示所有添加的图片。但是,当我试图添加图像并看到结果时,我只能看到空div
,就像图片不存在一样。但重启后Tomcat图像显示正常。我试图更改scope
,但我认为这是个坏主意。此外,我将LinkedList
更改为ArrayList
,但也未成功。
针对home.jsp
<div class="row">
<c:forEach items="${paths}" var="path">
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
<img class="img-responsive" src="../../../resources/wallpapers/${path}">
</a>
</div>
</c:forEach>
</div>
WallpaperService.java
public List<Wallpaper> wallpapers = new LinkedList<>();
public List<String> paths = new ArrayList<>();
public Wallpaper addWallpaper(File image) {
Wallpaper wallpaper = new Wallpaper();
wallpaper.setImage(image);
wallpapers.clear();
wallpapers.add(wallpaper);
return wallpaper;
HomeController.java
File[] files = new File("D:\\IntelliJ IDEA\\Wallpapers\\src\\main\\web\\resources\\wallpapers\\").listFiles();
@RequestMapping("/")
public String home(Model model){
wallpaperService.paths.clear();
for (File file : files) {
wallpaperService.paths.add(file.getName());
}
model.addAttribute("paths", wallpaperService.paths);
return "home";
}
img:home view
生成的html(第一个div没有显示图像,另一个先前添加,重新启动后再显示tomcat):
<div class="row">
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="/resources/wallpapers/wallhaven-138570.jpg"
data-lightbox="wallhaven-138570.jpg">
<img class="img-responsive" src="/resources/wallpapers/wallhaven-138570.jpg" />
</a>
</div>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="/resources/wallpapers/wallhaven-29611.jpg"
data-lightbox="wallhaven-29611.jpg">
<img class="img-responsive" src="/resources/wallpapers/wallhaven-29611.jpg" />
</a>
</div>
</div>
答案 0 :(得分:0)
文件列表在控制器的构造函数中创建。在应用程序启动时,此控制器仅被调用一次,因为Spring bean是单例(默认情况下)。
如果您需要最新的文件列表,请在home()
方法中创建该列表,而不是在构造函数中创建。
此外,使您的服务无状态,并且不要使用公共字段。我认为这项服务实际上并不实用。