簡體   English   中英

將收集對象從一個jsp轉移到另一個

[英]Transferring collection object from one jsp to another

我從數據庫中獲取數據,並將其存儲在一個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>

我很困惑為什么它會這樣做而沒有編碼來打印整個集合。

更改此:

<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”,就像您擁有它一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM