2012-01-27 2 views
0

У меня есть следующий код, который должен возвращать отсортированный список чисел m между 0 и n - 1. Я проверил, что список создан исправлен, но JSP ничего не печатает. Кто-нибудь может мне с этим помочь? Это метод в моем классе действий.JSTL не печатает значения

public static SortedSet<Integer> createCombo(int items, int maxNum) { 
    if (items > maxNum) { 
     System.out 
       .println("Cannot create a combination longer than the highest possible number."); 
     return null; 
    } 

    for (int i = 1; i <= items; i++) { 
     int newNum = 0; 
     boolean distinctNumber = false; 
     while (! distinctNumber) { 
      newNum = (int) Math.floor(Math.random() * maxNum); 
      distinctNumber = true; 

      if (i > 1) { 
       Iterator<Integer> iterator = combo.iterator(); 
       while ((iterator.hasNext()) && (distinctNumber)) { 
        if (newNum == iterator.next()) { 
         distinctNumber = false; 
        } 
       } 
      } 
     } 
     combo.add(newNum); 
    } 

    printCombo(); 
    return combo; 
} 

Это метод в классе контроллера.

public String execute() { 
    SortedSet<Integer> combo = new TreeSet<Integer>(); 

    try { 
     if ((items == 0) || (maxNum == 0)) { 
      return "failure"; 
     } 
     combo = Combo.createCombo(items, maxNum); 
     if (combo != null) { 
      HttpSession session = (HttpSession) request.getSession(); 
      session.setAttribute("combo", combo); 
     } 

     return "success"; 
    } catch (Exception e) { 
    } 
    return "failure"; 
} 

Это мой JSP. В моем браузере отображается только текст между тегами h1.

<%@ page import="java.io.*"%> 
<%@ page import="java.util.List"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<html> 
<head> 
<title>Lotto Results</title> 
</head> 
<body> 
<center> 
<h1>Lotto Results</h1> 
</center> 
<s:iterator value="combo"> 
     <c:forEach var="iterator" items="${combo.iterator}" > 
      ${iterator.next} 
     </c:forEach> 
</s:iterator> 
</body> 
</html> 
+0

Правая страница в браузере и * Исходный источник *. Что вы видите в выпуске HTML, созданного JSP? Все ли теги JSP были проанализированы? – BalusC

+0

Нет, ни один из них не обрабатывается. –

+2

* Нет * из них, включая теги Struts? Вы развертываете реализацию JSTL? Установлен ли ваш web.xml в 2.5+ для оценки EL? Также, что именно вы делаете; почему вы помещаете список в набор, и почему у вас есть два тега итератора для перебора по одному списку? –

ответ

0

Я решил свою проблему. Я удалил тег s: iterator, и я сохранил внутри него цикл итерации и изменил его на следующее, и эти изменения сработали.

<c:forEach var="combo" items="${combo}"> 
    ${combo} 
</c:forEach> 
0

комбо должно быть свойство вашего класса действий, и вы должны иметь метод getCombo(), который возвращает коллекцию. Затем значения будут отображаться.

Смотрите пример, у меня есть класс с именем Song и действиями под названием AlbumInfoAction

package vaannila; 

public class Song { 

    private String title; 
    private String genre; 

    Song(String title, String genre) 
    { 
     this.title = title; 
     this.genre = genre; 
    } 
    public String getTitle() { 
      return title; 
    } 
    public void setTitle(String title) { 
      this.title = title; 
    } 
    public String getGenre() { 
      return genre; 
    } 
    public void setGenre(String genre) { 
      this.genre = genre; 
    } 
} 

package vaannila; 

import java.util.ArrayList; 
import java.util.List; 


public class AlbumInfoAction{ 

private String title; 
private Artist artist; 
private static List&lt;Song&gt; songs = new ArrayList&lt;Song&gt;(); 

    static { 
     songs.add(new Song("Thriller","Disco")); 
     songs.add(new Song("Beat It","Rock")); 
     songs.add(new Song("Billie Jean","Pop")); 
    } 

    public String populate() 
    { 
     title = "Thriller"; 
     artist = new Artist("Michael Jackson","King of pop"); 
     return "populate"; 
    } 

    public String execute() 
    { 
     return "success"; 
    } 

    public String getTitle() { 
     return title; 
    } 
    public void setTitle(String title) { 
     this.title = title; 
    } 
    public Artist getArtist() { 
     return artist; 
    } 
    public void setArtist(Artist artist) { 
     this.artist = artist; 
    } 

    public List&lt;Song&gt; getSongs() { 
     return songs; 
    } 

} 

Для итерации, я должен иметь песни как свойство класса действия и метод getSongs должен присутствовать.

СПЯ код будет выглядеть следующим образом

<table class="songTable"> 
<tr class="even"> 
<td><b>Title</b></td> 
<td><b>Genre</b></td> 
</tr> 
<s:iterator value="songs" status="songStatus"> 
<tr 
class="<s:if test="#songStatus.odd == true ">odd</s:if><s:else>even</s:else>"> 
<td><s:property value="title" /></td> 
<td><s:property value="genre" /></td> 
</tr> 
</s:iterator> 
</table> 

Надеется, что это помогает.

+0

Считаете ли вы, что этот ответ по-прежнему будет полезен, если ссылки станут недоступными? Нет? Тогда улучшите ответ. – BalusC

+0

Спасибо за предложение. Улучшен ответ. –

Смежные вопросы