2013-01-16 5 views
12

mam taki kod w mojej klasie kontrolera MVC Wiosna Java:Jak uzyskać element listy wewnątrz jsp przy użyciu JSTL?

@RequestMapping(value = "jobs", method = { RequestMethod.GET }) 
public String jobList(@PathVariable("username") String username, Model model) { 
    JobInfo[] jobInfo; 
    JobStatistics js; 
    LinkedList<JobStatistics> jobStats = new LinkedList<JobStatistics>(); 
    try { 
     jobInfo = uiClient.getJobs(username); 
      for (int i = 0; i < jobInfo.length; i++) { 
      js = uiClient.getJobStatistics(jobInfo[i].getJobId()); 
      jobStats.add(js); 
      } 
     model.addAttribute("jobs", jobInfo); 
     model.addAttribute("jobStats", jobStats); 
    } 

który uiClient dostanie jakieś dane z bazy danych przy użyciu RMI ... teraz chcę pokazać zadania & związanej statystyki wewnątrz mojego pliku JSP stosując JSTL:

<c:set var="stats" value="${jobStats}" /> 
     <c:forEach var="jobs" items="${jobs}"> 
      <c:set var="jobID" value="${jobs.JobId}"/> 
      <table> 
      <tr class="tr1"> 
       <td>${jobs.Topic}</td> 
       <td>${stats.get(i).No}</td> 
      </tr> 
      </table> 
     </c:forEach> 

Jak mogę uzyskać LinkedList elementy modelu w moim JSP za pomocą JSTL? Możliwe, że nie było żadnego licznika i.

+0

Chciałbym również wykorzystać var ​​= „praca” zamiast var = „pracy” w przypadku, gdy chcesz aby odnieść się do oryginalnego "zlecenia" – Greg

Odpowiedz

21

Moim zdaniem dobrym rozwiązaniem jest połączenie obu odpowiedzi, które otrzymał:

użycie atrybutów varStatus od c: foreach tag

ale:

"get" nie jest funkcją jstl.

<c:forEach var="jobs" items="${jobs}" varStatus="i"> 
    <c:set var="jobID" value="${jobs.jobId}"/> 
    <table> 
    <tr class="tr1"> 
     <td>${jobs.topic}</td> 
     <td>${stats[i.index].no}</td> 
    </tr> 
    </table> 
</c:forEach> 

EDIT: jest to kod ostatecznie wykorzystane przez autora pytania:

<c:set var="stats" value="${jobStats}" /> 
<c:forEach items="${jobs}" varStatus="i"> 
    <c:set var="jobID" value="${jobs[i.index].jobId}"/> 
    <table> 
    <tr class="tr1"> 
     <td>${jobs[i.index].topic}</td> 
     <td>${stats[i.index].no}</td> 
     <td>${jobID}</td> 
    </tr> 
    </table> 
</c:forEach> 
+1

Próbowałem ur rozwiązanie, ale jest problem: javax. el.PropertyNotFoundException: Właściwość '0' nie została znaleziona na typie rs.ui.JobInfo – Mehdi

+0

mm to dziwne. Czy twoja zmienna "stats" to instancja 'LinkedList'? –

+1

tak, zdefiniowałem to jak to, co zrobiłem powyżej ... ale moja JobInfo jest tablicą – Mehdi

3

użycie varStatus atrybutem c:foreach tagu

<c:forEach var="jobs" items="${jobs}" varStatus="i"> 
    <c:set var="jobID" value="${jobs.JobId}"/> 
    <table> 
    <tr class="tr1"> 
     <td>${jobs.Topic}</td> 
     <td>${stats.get(i.index).No}</td> 
    </tr> 
    </table> 
</c:forEach> 
7

get nie jest funkcją JSTL.

<td>${stats[i.index].No}</td> 
+0

Kod OP zadziałałby przy użyciu EL 2.2. Pozostaje tylko problem z poprawną wartością "i", której nigdzie nie widać w kodzie podanym do tej pory (a także wyraźnie wspomnianym przez OP jako konkretny problem). – BalusC

+0

Próbowałem ur rozwiązanie, ale jest problem: javax.el.PropertyNotFoundException: Właściwość "0" nie znaleziono na typ rs.ui.JobInfo – Mehdi

+0

Jest to najbardziej przydatna odpowiedź – Andremoniy