我正在尝试使用HashMap的内容填充JSP表,但是我在第一次尝试在JSP(firstName属性)中引用它时继续获取PropertyNotFoundExceptions。我尝试过使用var [' key']和var.value.key在EL中引用它的方法,每次我得到一个PropertyNotFoundException。以下是我使用的代码:
JSP:
FormManager fm = new FormManager();
HashMap hm = fm.getOrder();
request.setAttribute("orderList", hm);
设置属性的Servlet:
public HashMap getOrder() {
dbm = new DatabaseManager();
Statement stmt = null;
String sql = "SELECT * FROM orders";
HashMap<String, String> itemMap = new HashMap<String, String>();
String[] keys = { "firstName", "lastName", "phone", "email" , "date", "product", "comments", "id" };
dbm.setUrl("jdbc:mysql://localhost:3306/pattycakes");
dbm.connect();
try {
stmt = dbm.getConn().createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int columns = rsmd.getColumnCount();
for (int i = 0; i < columns; i++) {
rs.beforeFirst();
rs.next();
itemMap.put(keys[i], rs.getString(i + 1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
dbm.disconnect(stmt, dbm.getConn());
}
return itemMap;
}
从FormManager类:
PROC SQL;
CONNECT TO ODBC (DATASRC='FAC Prod');
CREATE TABLE ONE AS
SELECT *
FROM CONNECTION TO ODBC
(EXEC FAC.USP_MASTERPATIENT '2014-01-01', '2014-01-05') AS ODBC;
DISCONNECT FROM ODBC;
QUIT;
到目前为止,该代码可能存在一些问题,因为我仍在为家庭成员编写此代码。我所关心的是如何超越异常。谢谢!
答案 0 :(得分:0)
JSP似乎假设orderList
属性将是Collection
个地图,但您提供的其他代码显示它被设置为具有String
个键的单个地图和{ {1}}值,代表单个订单。由于String
是orderList
,因此通过JSTL Map
对其进行迭代会生成foreach
的实例,地图中的每个条目都会生成一个Map.Entry
。这些条目确实没有firstName
属性,也没有您尝试提取的任何其他属性。
由于不恰当命名的orderList
属性实际上只为一个订单提供数据,因此对它的迭代没有意义。我倾向于认为您为该属性设置了错误的值,但如果它真的是您想要的那么您可能会在这些行中显示带有JSP代码的一个订单:
<!-- no foreach -->
<tr>
<td class="name">
<a href="">${ orderList["firstName"] }</a>
</td>
<td>${ orderList["date"] }</td>
<td>${ orderList["product"] }</td>
<td>${ orderList["comments"] }</td>
</tr>