【发布时间】:2014-07-24 20:42:28
【问题描述】:
我从数据库中获取数据并将其存储在一个 jsp(比如 One.jsp)中的某个集合对象中。我希望这个集合对象在另一个 jsp(比如 Two.jsp)中可用。它可能包含大量数据。所以,我通过以下方式使用了java bean。
public class BeanClass implements Serializable{
private HashMap<String,List<String>> myMap;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public HashMap<String,List<String>> getMyMap() {
return myMap;
}
public void setData(HashMap<String,List<String>> myMap) {
this.myMap = myMap;
}
}
我在One.jsp中设置bean的方式如下。
<jsp:useBean id="dataObject" class="com.mypack.BeanClass" scope="session"/>
<jsp:setProperty name="dataObject" property="myMap"/>
<%
dataObject.setData(myMapObj);
%>
但我收到以下错误:
Can't find a method to write property 'dataMap' of type 'java.util.HashMap' in a bean of type 'com.mypack.BeanClass'
我在某处发现,除非它是一个字符串,否则我们不能为其他事情做这个集合。无论如何,我可以解决它以使其甚至适用于集合对象吗?这样我就不需要回滚我所做的很多事情。如果不能,请建议如何将集合对象从一个 jsp 转移到另一个?使用 sn-p 的示例表示赞赏。
或者是我缺少一些额外的配置来使 bean 工作?
注意:我可能使用了 redirect() 方法,但这里从 One.jsp 到 Two.jsp 的导航是通过单击超链接(href)完成的
编辑:
感谢 Alfreema。在我更改为 setMyMap 后,他的解决方案有效,但在 Two.jsp 中我遇到了问题。我尝试只显示地图的一部分,如下所示。但它会显示 Map 中的所有内容,就像我们使用 out.println(myMap); 时一样。并在打印整个地图的内容后在页面的最后显示表格。
Two.jsp:
<jsp:include page="header.jsp"/>
<jsp:useBean id="dataObject" class="com.mypack.BeanClass" scope="session"/>
<jsp:getProperty name="dataObject" property="myMap"/>
<%! HashMap<String,List<String>> gottenMap = null; %>
<%
gottenMap = dataObject.getMyMap();
%>
<table>
<tbody>
<%
String selectedPart = request.getParameter("part");
List<String> list = gottenMap.get(selectedPart);
for(int i=0; i<list.size(); i++)
{
%>
<tr>
<td colspan='2'><strong>
<%= list.get(i) %>
</strong></td>
</tr>
<%
}
%>
</tbody>
</table>
我很困惑为什么它会这样而不用编码来打印整个集合。
【问题讨论】: