spring 启动 - 在 JSP 中显示来自控制器的对象数据

spring boot - displaying object data from controller in JSP

我有一个用户 class、两个 JSP 和一个控制器。我想注册一个用户,将他们的详细信息存储在数据库 (H2) 中,并在注册后显示用户名。

这是我的 home.jsp -

<form action="addUser">
    <label>Name: </label><input type="text" name="name"/>
    <label>Id: </label><input type="number" name="id"/>
    <input type="submit" />
</form>

这是我的控制器 -

package com.example.demo;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HomeController {

    @Autowired
    UserRepo usrrepoobj;
    
    @RequestMapping("/")
    public String home()
    {
        return "home.jsp";
    }
    
    @RequestMapping("addUser")
    public ModelAndView addUser(@RequestParam int id, User usr)
    {
        usrrepoobj.save(usr);
        User obj = usrrepoobj.findById(id).orElse(null);
        ModelAndView mv = new ModelAndView();
        mv.addObject(obj);
        mv.setViewName("afterRegister.jsp");
        
        //EVEN THIS DOESNT WORK
//      usrrepoobj.save(usr);
//      User obj = usr;
//      ModelAndView mv = new ModelAndView();
//      mv.addObject(obj);
//      mv.setViewName("afterRegister.jsp");
        //EVEN THIS DOESNT WORK
        
        return mv;
    }
    
}

这是我的 afterRegister.jsp -

Registered as ${obj.name}

对象被添加到数据库中。在下一个 JSP 中显示数据时,我做错了什么?

可能您不知道添加用户的 ID,这就是为什么您的 findById return 总是 null。来自 save() 方法的 return 用户。显示您的用户实体。

@RequestMapping("addUser")
public String addUser(@RequestParam int id, User usr, Model model)
{
    User obj = usrrepoobj.save(usr);
    model.addAttribute("obj", obj);
    
    return "afterRegister.jsp";
}

在控制器中进行以下更改:

usrrepoobj.save(usr);
        User obj = usrrepoobj.findById(id).orElse(null);
        ModelAndView mv = new ModelAndView();
        mv.addObject("object",obj); //change this
        mv.setViewName("afterRegister.jsp");

在afterRegister.jsp-

Registered as ${object.name}