【问题标题】:Transferring collection object from one jsp to another将集合对象从一个 jsp 转移到另一个
【发布时间】: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>

我很困惑为什么它会这样而不用编码来打印整个集合。

【问题讨论】:

    标签: java jsp javabeans


    【解决方案1】:

    改变这个:

    <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}"/>
    

    您的设置器称为“setData(...)”,而不是“setMyMap(...)”。 JSP 将看到 property="data" 并调用 setData(...)。

    这样你就可以解决问题了,但你没有告诉我们你在哪里设置 myMapObj。我们必须假设您在其他地方正确设置,并通过 pageContext.setAttribute("myMapObj", myMapObj); 使其可用于标签。打电话。

    旁注:我建议您将 setData(..) 方法重命名为 setMyMap(...) 以使其与 getter getMyMap(...) 保持一致。如果你这样做了,那么你需要将属性 =“...”改回“myMap”,就像你有它一样。

    【讨论】:

    • 傻我,我认为这是问题所在,非常感谢。测试它。
    • 那行得通。但是我现在在 Two.jsp 中遇到了问题。你能看看我的编辑吗?
    • 这是一个全新的问题。我建议为此打开一个新问题。
    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2016-02-28
    • 2015-01-18
    相关资源
    最近更新 更多