无法在null上找到Thymeleaf属性或字段'xxxx'

时间:2017-08-02 15:15:37

标签: spring-boot thymeleaf

错误:无法在null上找到属性或字段“headUrl”。

但是我找不到null。我检查了我的代码,仍然不知道。

结果是应该有10条新闻,其他9条新闻正常,最后有错误,无法正确显示网址。

这是代码(我不知道如何粘贴图片):

Home.html中:

<div class="user-avatar">
   <a href="/user/${vo.user.id}">
      <img width="32" class="img-circle" th:src="${vo.user.headUrl}">
   </a>
</div>

班级用户:

private String headUrl;

public User() {}

public User(String name) {
    this.name = name;
    this.password = "";
    this.salt = "";
    this.headUrl = "";
}

public String getHeadUrl() {
    return headUrl;
}

public void setHeadUrl(String headUrl) {
    this.headUrl = headUrl;
}

数据库:

@Test
public void contextLoads() {
    Random random = new Random();
    for (int i = 1; i < 10; i++) {
        User user = new User();
        user.setHeadUrl(String.format("http://images.nowcoder.com/head/%dt.png", random.nextInt(100)));
        user.setName(String.format("USER%d", i));
        user.setPassword(String.format("PASSWORD--%d",i*i));
        user.setSalt(String.format("SALT %d HelloWorld",i*5+20));
        userDao.addUser(user);              
    }
}

主:

@RequestMapping(path = {"/", "/index"}, method = {RequestMethod.GET,RequestMethod.POST})
public String index(Model model){
    List<News> newsList = newsService.getLatesNews(0, 0,10);

    List<Map> vos = new ArrayList<>();
    for(News news :newsList){
        Map<String, Object> vo = new HashMap<String, Object>();
        vo.put("news",news);
        vo.put("user", userService.getUser(news.getUserId()));
        vos.add(vo);
    }

    model.addAttribute("vos", vos);
    return "home.html";
}

Class UserService:

public class UserService {
@Autowired
private UserDao userDao;

public User getUser(int id) 
    return userDao.selectById(id);}

1 个答案:

答案 0 :(得分:1)

您创建一个新的vo(在新闻循环中)并设置用户但用户可能为null(userService.getUser(news.getUserId()可能返回null)。

如果你想显示vo.user.headUrl,即使用户为null,你也可以写这个

vo?.user?.headUrl

以上代码与显示用户相同(如果存在),如果存在则显示headUrl。