我无法在JSP页面中访问modelmap值

时间:2014-06-24 15:29:24

标签: java jsp spring-mvc

我正在重构我的代码并最终删除了一个bean。 ModelMap值正确传递并显示在我的JSP页面上,并存在该bean。但是,现在我直接从数据库中提取数据,但即使数据被正确读取,我也无法在JSP页面上访问这些值。

我有类似的东西: -

public String viewData(@ModelAttribute("") ModelMap model) {
    Connection conn = null;
    ResultSet rs = null;
    String driver = "com.mysql.jdbc.Driver";
    Statement statement = null;
    try{
          Class.forName(driver);
          conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testing1234","root","root");
          statement = conn.createStatement();
          String sql = "SELECT * FROM  testdata";
           rs = statement.executeQuery(sql);
          while (rs.next()) {
          model.addAttribute("test", rs.getString(1));
          model.addAttribute("test1", rs.getString(2));
          model.addAttribute("test2", rs.getString(3));
          model.addAttribute("test3", rs.getString(4));
          model.addAttribute("test4" ,rs.getDate(5));
            }
    } catch (SQLException e) {
     e.printStackTrace();
 } catch (ClassNotFoundException e) {
     e.printStackTrace();
 }finally {

     try {
         if (rs != null) {
             rs.close();
         }
         if (statement != null) {
             statement.close();
         }
         if (conn!= null) {
             conn.close();
         }
     } catch (SQLException e) {
         e.printStackTrace();
     }
 } 
    return "jsppage";
}

但是,在我尝试访问$ {test}的JSP页面中,我得到一个空字符串。是否有任何替代方法,以便我可以在我的JSP页面上显示数据?

2 个答案:

答案 0 :(得分:0)

Spring使用HandlerMethodArgumentResolver接口处理处理程序方法参数。处理@ModelAttributeServletModelAttributeMethodProcessor的实现具有更高的优先级(之前已注册)处理ModelMapMapMethodProcessor的实现。

这意味着Spring会创建一个ModelMap对象并将其放入Model,并使用键""。您可以使用JSP中的空键访问该属性,并通过它访问其元素(您从ResultSet添加的嵌套属性)。

IMO的最佳解决方案是从方法参数中删除@ModelAttribute注释。

答案 1 :(得分:0)

您只需要删除注释@ModelAttribute("")。

顺便说一句,您应该重新考虑将业务和数据访问逻辑移动到服务和DAO层。