SpringMVC jsp查看req参数

时间:2016-10-23 21:47:03

标签: java spring hibernate jsp dao

我正在制作一个春季MVC项目。我的Admin.jsp页面是:

<form:form action="/users" method="post" ModelAttribute="user"> 
        <table border="1" >
            <tr>
                <td><a href="/findUserById"> Find a User</a></td>
            </tr>
            <tr>
                <td><a href="/edit">Edit a User</a></td>
            </tr>
            <tr>
                <td><a href="/update">Update a User</a></td>
            </tr>
            <tr>
                <td><a href="/edit"> Delete a User</a></td>
            </tr>
            <tr>
                <td><a href="users">List of all the Users</a></td>
            </tr>
        </table>
    </form:form>

点击href =“users”后,请求转到控制器:

@RequestMapping(value = "/users", method = RequestMethod.GET)
    public String usersList(@ModelAttribute("user") User user, BindingResult result, Model model) {
        List<User> userList = userService.listPersons();
        // attribute goes to jsp
        model.addAttribute("userList", userList);
        // return users.jsp page
        return "users";
    }

我的users.jsp页面是:

<body>
    <table>
        <thead style="background: #fcf">
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>User Id</th>
                <th>Email</th>
                <th>Department</th>
                <th>Role</th>
                <th colspan="3"></th>
            </tr>
        </thead>
        <c:forEach items="${userList}" var="user">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.userId}</td>
                <td>${user.email}</td>
                <td>${user.department}</td>
                <td>${user.role}</td>
        <td><a href="<c:url value='/edit/${user.id}' />">Edit</a></td>
        <td><a href="<c:url value='/delete/${user.id}' />">Delete</a></td>
        <td><a href="<c:url value='/edit/${user.id}' />">Update</a></td>
            </tr>
        </c:forEach>
    </table>
</body>

在users.jsp页面上,我点击列表中每个用户的href编辑按钮,url变为users / {id},控件转到控制器的方法,写成:

@RequestMapping("/edit/{id}")
    public String editUser(@ModelAttribute("user") User user, Model model) {    
        User u=  userService.findById(id);      
        user.setId(id);
        // Delegate to userService for update
        userService.update(user);
        model.addAttribute("id", id);       
        model.addAttribute("userList", userList);
        return "editedUser";
    }

我无法弄清楚如何从users.jsp获取用户的id到控制器方法。 我的editedUser.jsp页面是:

<body>
<h1>Today on </h1> <%= new java.util.Date() %>
<p>You have edited the user with id ${user.id} with info: </p>
${userList}
<p>Return to <a href="login">Login Page</a></p>
</body>

DaoImpl是

@Repository
public class UserDaoImpl implements UserDao {
    private static final Logger logger = LoggerFactory.getLogger(UserDaoImpl.class);
    @Autowired
    private SessionFactory sessionFactory;
    public UserDaoImpl() {  }
    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
    public UserDaoImpl(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
    // ***********************save User*****************
    @Transactional
    public boolean save(User user) {

        // Retrieve session from Hibernate
        Session session = sessionFactory.getCurrentSession();
        // save
        session.save(user);
        return true;
    }
    // **************update/edit******************
    @Transactional
    public User update(User user) {
        // Retrieve session from Hibernate
        Session session = this.sessionFactory.getCurrentSession();
        // Retrieve existing person via id
        User existingUser = (User) session.get(User.class, user.getId());
        // Assign updated values to this person
        existingUser.setName(user.getName());
        existingUser.setEmail(existingUser.getEmail());
        existingUser.setRole(existingUser.getRole());
        existingUser.setDepartment(existingUser.getDepartment());
        // update Use
        session.update(user);
        // return to jsp
        return user;
    }
    // ***********find user by Id*************
    public User findById(int id) {
        // Retrieve session from Hibernate
        Session session = this.sessionFactory.getCurrentSession();
        // get user
        User u = (User) session.get(User.class, new Integer(id));
        return u;
    }
    // *************************List of User**************
    @SuppressWarnings("unchecked")
    @Transactional
    public List<User> listPersons() {
        Session session = this.sessionFactory.getCurrentSession();
        List<User> personsList = session.createQuery("from User").list();
        for (User u : personsList) {
            logger.info("User List::" + u);
        }
        return personsList;
    }
    // *************************Delete a User**************
    public User deleteById(int id) {
        Session session = this.sessionFactory.getCurrentSession();
        User u = (User) session.load(User.class, new Integer(id));
        if (null != u) {
            session.delete(u);
        }
        logger.info("Person deleted successfully, person details=" + u);
        return u;
    }

当我运行应用程序时,所有页面r都可以很好地到达用户页面,但是当我点击users.jsp上的编辑/更新href时,我从tomcat7上获得了这个:

Unresolved compilation problems: id cannot be resolved to a variable id cannot be resolved to a variable id cannot be resolved to a variable 

如何从users.jsp获取id到控制器以及我错在哪里?请建议。任何类似的示例应用程序将不胜感激感谢

3 个答案:

答案 0 :(得分:0)

您的问题出在您的控制器方法参数中。试试这个:

@RequestMapping("/edit/{id}")
    public String editUser(@PathVariable("id") Integer id, Model model) {    
       Integer userId = id; // get your id passed from jsp
       // do whatever with the id 
       // ...
}  

假设您的id属性为Integer 您的methed参数列表中的变量ID与RequestMapping中的{id}匹配。

以下是文档,您可以找到有关如何处理路径变量的更多信息:
Spring mvc doc

答案 1 :(得分:0)

@RequestMapping(value = "/users", method = RequestMethod.GET)
    public String usersList(@ModelAttribute("user") User user, BindingResult result, Model model) {
        List<User> userList = userService.listPersons();
        // attribute goes to jsp
        model.addAttribute("userList", userList);
        // return users.jsp page
        return "users";
    }

第一件事

@ModelAttribute(&#34; user&#34;)将表单从jsp传递给控制器​​时使用用户用户。你也在list方法中使用了它。这是不对的。您甚至不需要它(@ModelAttribute(&#34; user&#34;))向用户显示列表。

第二件事

您正从服务中取出[List userList]并返回String。这也是错误的。您可以按原样返回列表。

第三件事

正如injun.Y指出的那样,您只需要一个来自JSP的整数值$ {user.id}。您无法期望整个JavaScript对象与[User]对象具有相同的getter和setter。

第四件事

如果您真的不熟悉PathVariable,那么您可以使用HttpServletRequest。

    @RequestMapping("/edit")
    public String editUser(HttpServletRequest req, Model model) {    
      String id = req.getParameter("id");
      User u=  userService.findById(id);      
      //do things here
}

答案 2 :(得分:0)

试试这段代码:

@RequestMapping("/edit/{id}",method=RequestMethod.GET)
public String editUser(@PathVariable("id") Integer id, Model model) {    
    model.addAttribute("user", userService.findById(id));
    return "editedUser";
}

您只需在编辑页面上显示user属性。在上面的代码片段中,我进行了如下更改:

  • RequestMethod设为GET
  • 使用@PathVariable代替@ModelAttribute,而不是<a>代码,只发送id