Masalah Mengambil nilai dari TreeMap ‹id, beans› di JSP

Saya mengalami masalah saat mencoba mengambil nilai dari treeMap yang berisi selama beberapa waktu. Saya telah mencoba beberapa metode berbeda untuk mengakses data, tetapi hasil terjauh yang saya dapatkan adalah JSP mengakui adanya Hash atau Peta Pohon, tetapi tidak benar-benar mengulanginya dan mengembalikan data.

Saya telah mencoba menemukan cara terbaik untuk mengurutkan hasil xml berdasarkan atribut tag. Jadi saya mengambil xml dan memasukkan nilai masing-masing ke dalam kacang, lalu mengambil, lalu menempatkan kacang di peta pohon di mana Key=SortId. Karena treema secara otomatis mengurutkan, hasilnya adalah peta nilai XML yang diurutkan. Populasi kacang dan treeMap berfungsi dengan baik, masalahnya hanya menarik nilai-nilai tersebut ke JSP

Mungkin dengan lebih baik mengilustrasikan peta yang saya hasilkan akan membantu setidaknya menyampaikan maksud yang ingin saya sampaikan. Tujuannya adalah untuk menelusuri daftar yang baru diurutkan dan mengisi div saya dengan sesuatu seperti

<div>
Name: ${tileName} <br />
Description: ${tileDescrip} <br />
<img scr="${imagePath}">
</div>

peta pohon yang dihasilkan terlihat seperti ini

diurutkanHash

{0, bean(tileName,tiledescrip,imagePath)}
{1, bean(tileName,tiledescrip,imagePath)}
{2, bean(tileName,tiledescrip,imagePath)} 

Masalah saya adalah dengan kode di atas, saya tidak mendapatkan nilai apa pun yang dikembalikan bahkan dari iterasi peta tingkat pertama meskipun mengeluarkan peta itu sendiri menunjukkan bahwa itu ada di sana.

sortedHash = CTTeamsiteXMLHash@135b24b 

jadi aliran Pseudo dari apa yang saya lakukan

Read XML
- Iterate
     -Parse XML Values to bean
  -Place bean in Treemap<SortId, XML-Bean>
-Return TreeMap
-Loop through treemap and then pull each bean value out. 

Berikut contoh XML

<teaser>
<sort>1</sort>
<value1></value1>
<value2></value2>
</teaser>

Komponen Saya

public class CTTeamsiteXMLHash {


private HashMap<String, Object> xmlHash;
private TreeMap<String, Object> sortedHash;


public TreeMap<String, Object> getSortedHash() {
 return sortedHash;
}

public void setSortedHash(TreeMap<String, Object> sortedHash) {
 this.sortedHash = sortedHash;
}

public void setXmlHash(String sortOrder, CTTeamsiteXMLBean bean) {
 getXmlHash().put(sortOrder, bean);

}

public HashMap<String, Object> getXmlHash() {
 return xmlHash;
}

Ini adalah Upaya saya yang gagal dalam mengakses dari JSP. jika itu membantu, saya juga meneruskan sortHash dalam permintaan

     <jsp:useBean id="sortedHash" class="CTTeamsiteXMLHash"
 scope="request"/>
     <c:forEach items="${sortedHash.sortedHash}"
 var="eachItem">
       <c:forEach items="${eachItem.value}"
 var="anItem">
          <c:out value="${anItem.tileName.value}" /> :
 <c:out
 value="${anItem.tileDescrip.value}" />
       </c:forEach>
     </c:forEach>

person QUEdini    schedule 13.12.2010    source sumber
comment
Persyaratan fungsionalnya tidak jelas dan kodenya tidak benar-benar terdokumentasi sendiri dan contoh upaya yang gagal tidak banyak membantu dalam memahami persyaratan tersebut. Saya menyarankan untuk mengedit pertanyaan Anda untuk menjelaskan persyaratan fungsional secara lebih rinci dan/atau menambahkan contoh dalam kodesemu atau kode Java normal bagaimana tepatnya Anda ingin mengulangi peta, menggunakan loop for dan seterusnya. Dengan cara ini lebih mudah untuk menerjemahkannya ke dalam pendekatan JSTL.   -  person BalusC    schedule 13.12.2010
comment
Maaf saya lupa, semua orang tidak melihat hal yang sama dengan saya selama 2 hari terakhir. Saya telah memperbarui uraian saya, semoga dapat menjelaskan apa yang saya coba lakukan   -  person QUEdini    schedule 13.12.2010


Jawaban (1)


Meskipun ada pembaruan pertanyaan, saya masih tidak mengerti apa sebenarnya yang Anda butuhkan di sisi tampilan. Semuanya terlalu kabur.

Bagaimanapun, setiap c:forEach iterasi pada Map akan memberi Anda Map.Entry yang pada gilirannya memiliki metode getKey() dan getValue().

Berikut ini contoh dasarnya:

<c:forEach items="${map}" var="entry">
    key = ${entry.key}, value = ${entry.value}<br>
<c:forEach>

Pengetahuan ini akan membantu Anda memulai.

Lihat juga:


Pembaruan: Saya masih tidak mengerti apa yang Anda lakukan dengan dua peta dan mengapa sebenarnya Anda memerlukan Map dan bukan List karena Anda sepertinya tidak tertarik di kunci. Jadi, inilah contoh dengan hanya satu peta dan kelas servlet sederhana yang memproses permintaan terlebih dahulu.

Pertama kelas Tile (yang disederhanakan):

public class Tile {
    private String name;
    private String description;
    private string imagepath;
    // Add/generate c'tor/getters/setters/etc.
}

Servlet pra-pemrosesan:

Map<Integer, Tile> map = new TreeMap<Integer, Tile>();
map.put(1, new Tile("name1", "description1", "imagepath1"));
map.put(2, new Tile("name2", "description2", "imagepath2"));
map.put(3, new Tile("name3", "description3", "imagepath3"));
// ...

request.setAttribute("map", map); // It'll be available as ${map} in JSP.
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);

JSP:

<c:forEach items="${map}" var="entry">
    <div>
        Map key: ${entry.key}<br>
        Tile name: ${entry.value.name}<br>
        Tile description: ${entry.value.description}<br>
        Tile image: <img src="${entry.value.imagepath}">
    </div>
</c:forEach>

(Omong-omong, tidak perlu jsp:useBean)

person BalusC    schedule 13.12.2010
comment
Mungkin dengan lebih baik mengilustrasikan peta yang saya hasilkan akan membantu setidaknya menyampaikan maksud yang ingin saya sampaikan. peta pohon yang dihasilkan tampak seperti ini ‹pre›‹code›{Key, value}‹br/› {0, bean(tileName,tiledescrip,iagePath)} - {1, bean(tileName,tiledescrip,iagePath)} - {2 , bean(tileName,tiledescrip,iagePath)}‹/code›‹/pre› ‹br/› . Masalah saya adalah dengan kode di atas, saya tidak mendapatkan nilai apa pun yang dikembalikan bahkan dari iterasi peta tingkat pertama meskipun mengeluarkan peta itu sendiri menunjukkan bahwa itu ada di sortHash = CTTeamsiteXMLHash@135b24b - person QUEdini; 13.12.2010
comment
Anda perlu mengakses properti kacang, seperti ${entry.value.tileName}. - person BalusC; 13.12.2010
comment
Masalah yang masih saya hadapi adalah karena alasan tertentu forEach saya bahkan tidak mengenali petanya. bukankah seharusnya saya menggunakan ini untuk menarik komponen global ke halaman? ‹jsp:useBean id=sortedHash class=CTTeamsiteXMLHash scope=permintaan/› - person QUEdini; 13.12.2010
comment
Lihat pembaruan jawaban. Semoga ini membawa Anda ke arah yang benar. Saya mendapat kesan bahwa Anda terlalu memperumit masalah. - person BalusC; 13.12.2010
comment
Anda mungkin benar tentang kerumitan yang berlebihan, metode ini tampaknya berhasil..terima kasih banyak BalusC - person QUEdini; 13.12.2010
comment
Saya mendapat banyak masalah karena ServletException. javax.servlet.jsp.JspException: Terjadi kesalahan saat mengevaluasi nilai atribut tindakan khusus dengan nilai ${entry.value}: Tidak dapat menemukan nilai demi nilai dalam objek kelas java.lang.String menggunakan operator . (null) tetapi ketika saya melakukan ‹c:out value=${map} /› saya mendapatkan {0=com.ctstore.utils.ui.CTTeamsiteXMLBean@5fed59, 1=com.ctstore.utils.ui.CTTeamsiteXMLBean@1d7a6ab } jadi nilainya ada, hanya saja tidak dipetakan dengan ‹c:forEach items=${test} var=entry› ‹c:out value=${entry.value} /› ‹/c:forEach› - person QUEdini; 13.12.2010
comment
oh dan ketika saya mencoba mengeluarkan ${entry.value}, hasilnya sama seperti teks, ia tidak benar-benar mencoba menyelesaikan nilai di dalam ‹C:forEach› - person QUEdini; 13.12.2010
comment
Apakah ${test} itu peta? Pengecualian menunjukkan bahwa tidak demikian. Gunakan <c:forEach items="${map}" var="entry"> bukannya <c:forEach items="${test}" var="entry"> - person BalusC; 13.12.2010
comment
${test} adalah peta di sini bahkan mengubah nama menjadi peta, c:out masih menunjukkan nilai di atas, tetapi saya masih mendapatkan null untuk entri.nilai.. ‹c:› seharusnya dari ‹%@ taglib uri =java.sun.com/jstl/core prefix=c %› benar? - person QUEdini; 13.12.2010
comment
Itu URI JSTL 1.0 kuno. Anda memerlukan http://java.sun.com/jsp/jstl/core (dengan bagian /jsp). Lihat juga jawaban ini. - person BalusC; 13.12.2010
comment
terima kasih atas jawaban yang saya inginkan LK_PY_ALLOW bertipe tree map, hashtable jadi ... <c:forEach items="${LK_PY_ALLOW}" var="entry"> <c:if test="${entry.key eq param.allowC}"> ${entry.value.allowAd} </c:if> </c:forEach> - person shareef; 20.07.2013