我必须在页面中显示对象地图。
Struts动作类如下:
public class DonorListAction extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception
{
DonorDAO donorDAO = new DonorDAO();
HashMap<Integer, DonorDetailsForm> donorMap =donorDAO.getDonorList();
request.setAttribute("donorMap",donorMap);
return mapping.findForward("success");
}
}
jsp页面如下所示:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page language="java"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c"%>
<html>
<HEAD><TITLE>List of Donors</TITLE></HEAD>
<body BGCOLOR="#FDF5E6">
<table align="center" border="1">
<tr>
<th align="center">Donor ID</th>
<th align="center">Name</th>
<th align="center">Email Address</th>
<th align="center">Phone Number</th>
</tr>
<c:forEach var="donor" items="${donorMap}">
<tr>
<td align="right">${donor.key}</td>
<td align="right">${donor.value.firstName} ${donor.value.lastName}</td>
<td align="right">${donor.value.emailAddress}</td>
<td align="right">${donor.value.phoneNumber}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
现在,当我执行这段代码时,我得到:
javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性“key” javax.el.BeanELResolver$BeanProperties.get(BeanELR esolver.java:193) javax.el.BeanELResolver$BeanProperties.access$400( BeanELResolver.java:170) javax.el.BeanELResolver.property(BeanELResolver.java:279) javax.el.BeanELResolver.getValue(BeanELResolver.java:60) javax.el.CompositeELResolver.getValue(CompositeELR esolver.java:54) org.apache.el.parser.AstValue.getValue(AstValue.java:118) org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) org.apache.jasper.runtime.PageContextImpl.propriet aryEvaluate(PageContextImpl.java:925) org.apache.jsp.jsp.DisplayDonorList_jsp._jspx_meth _c_005fforEach_005f0(DisplayDonorList_jsp.java:121 ) org.apache.jsp.jsp.DisplayDonorList_jsp._jspServic e(DisplayDonorList_jsp.java:83) org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:369) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322) org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:249) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063) org.apache.struts.action.RequestProcessor.processF orwardConfig(RequestProcessor.java:386) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doF ilter(ReplyHeaderFilter.java:96)
我犯了什么错误?
例外基本上是告诉
var
属性中保存的对象等于 java.lang.String
。所以它看起来${donorMap}
是实际上一个List<String>
或者可能是一个String[]
。此外,方法 getDonorList();
表明它实际上返回的是 List
,而不是 HashMap
。
我不确定问题的根本原因,也许您没有运行您认为正在运行的代码,而是运行以下代码
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c"%>
很可怕。这意味着您已经提取了 taglib 的原始 JAR 文件,并用松散的内容和 TLD 文件弄乱了 Web 应用程序的类路径。它可能与其中一个或另一个发生冲突。
我强烈建议清理网络内容中的所有内容和与这些标签库有某种关系的
/WEB-INF
,然后通过将未触及的JAR文件直接放入/WEB-INF/lib
文件夹中并在JSP中重新声明它们来重做,如下所示:
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
也就是说,这种提取 taglib 文件的不良做法通常会在 roseindia.com 的 Struts/JSTL 教程中公开。确保您不跟随他们。即使没有,请记住这个站点,并在您不小心登陆该站点时立即点击
Ctrl+W
。