JSTL не печатает значения - PullRequest
0 голосов
/ 28 января 2012

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

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>

Ответы [ 2 ]

0 голосов
/ 28 января 2012

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

<c:forEach var="combo" items="${combo}">
    ${combo}
</c:forEach>
0 голосов
/ 28 января 2012

combo должно быть свойством вашего класса Action, и у вас должен быть метод 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 .

Код JSP будет выглядеть следующим образом

<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>

Надеюсь, это поможет.

...