将集合对象从一个jsp传输到另一个jsp

时间:2014-07-24 20:42:29

标签: java jsp javabeans

我从数据库中获取数据并将其存储在一个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>

我很困惑,为什么它没有编码打印整个系列。

1 个答案:

答案 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”,就像你拥有它一样。