我从数据库中获取数据并将其存储在一个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转移到另一个jsp?感谢摘录示例。
或者我是否缺少一些额外的配置来使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>
我很困惑,为什么它没有编码打印整个系列。
答案 0 :(得分:2)
改变这个:
<jsp:useBean id="dataObject" class="com.mypack.BeanClass" scope="session"/>
<jsp:setProperty name="dataObject" property="myMap"/>
<%
dataObject.setData(myMapObj);
%>
对此:
<jsp:useBean id="dataObject" class="com.mypack.BeanClass" scope="session"/>
<jsp:setProperty name="dataObject" property="data" value="${myMapObj}"/>
你的setter被称为“setData(...)”,而不是“setMyMap(...)”。 JSP将看到property =“data”并调用setData(...)。
所以这会解决你的问题,但你没有告诉我们你在哪里设置myMapObj。我们必须假设你在其他地方正确设置它并通过pageContext.setAttribute(“myMapObj”,myMapObj)使它可用于标记;调用
旁注:我建议您将setData(..)方法重命名为setMyMap(...),使其与getter getMyMap(...)保持一致。如果你这样做,那么你需要将property =“...”改回“myMap”,就像你拥有它一样。