我正在重构我的代码并最终删除了一个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页面上显示数据?
答案 0 :(得分:0)
Spring使用HandlerMethodArgumentResolver
接口处理处理程序方法参数。处理@ModelAttribute
,ServletModelAttributeMethodProcessor
的实现具有更高的优先级(之前已注册)处理ModelMap
,MapMethodProcessor
的实现。
这意味着Spring会创建一个ModelMap
对象并将其放入Model
,并使用键""
。您可以使用JSP中的空键访问该属性,并通过它访问其元素(您从ResultSet
添加的嵌套属性)。
IMO的最佳解决方案是从方法参数中删除@ModelAttribute
注释。
答案 1 :(得分:0)
您只需要删除注释@ModelAttribute("")。
顺便说一句,您应该重新考虑将业务和数据访问逻辑移动到服务和DAO层。