JAXB列表unmarshall不显示完整列表,只显示最后一个对象

时间:2015-12-17 21:46:52

标签: java jsp jaxb

所以我没什么问题。我有这样的XML:

<Game>
    <GameTitle>Grand Theft Auto: Vice City</GameTitle>
    <Genres>
        <genre>Action</genre>
        <genre>Sandbox</genre>
    </Genres>
</Game>

我想在我的JSP文件“Action”和“Sandbox”中取消支持。但它只显示我“沙盒”。这是我的代码:

@XmlRootElement(name = "Game")
public class Game {
    private String gameTitle;   
    private List<Genres> genres = new ArrayList<Genres>();

    public List<Genres> getGenres() {
        return genres;
    }

    @XmlElement(name = "Genres", type = Genres.class)
    public void setGenres(List<Genres> genres) {
        this.genres = genres;
    }

    public String getGameTitle() {
        return gameTitle;
    }

    @XmlElement(name = "GameTitle")
    public void setGameTitle(String gameTitle) {
        this.gameTitle = gameTitle;
    }
}

我的类型课程:

@XmlRootElement(name = "Genres")
public class Genres {
    private String genre;

    public String getGenre() {
        return genre;
    }

    @XmlElement(name = "genre")
    public void setGenre(String genre) {
        this.genre = genre;
    }
}

我尝试以这两种方式在JSP中显示它:

<c:forEach items="${game.genres}" var="item">
    ${item.genre}<br>
</c:forEach>

0: ${game.genres[0].genre}
1: ${game.genres[1].genre}
2: ${game.genres[2].genre}

但它只返回Sandobx0: Sandbox 1: 2:。有人可能知道我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果将List<Genres>替换为List<String>,您的代码仍然有效。

类似的东西:

@XmlRootElement(name = "Game")
@XmlAccessorType(XmlAccessType.FIELD)
public class Game {
    @XmlElement(name="GameTitle")
    private String gameTitle;

    @XmlElementWrapper(name="Genres")
    @XmlElement(name="genre")
    private List<String> genres;

    public List<String> getGenres() {
        return genres;
    }


    public void setGenres(List<String> genres) {
        this.genres = genres;
    }

    public String getGameTitle() {
        return gameTitle;
    }

    public void setGameTitle(String gameTitle) {
        this.gameTitle = gameTitle;
    }
}

问题可能是你的流派很简单。

答案 1 :(得分:0)

您的课程注释不正确。保留setter而不注释。使用XmlElementXmlElementWrapper注释getter为以下内容。

@XmlElementWrapper( name="Genres" )
@XmlElement(name = "genre", type = Genres.class)
public List<Genres> getGenres() {
    return genres;
}

public void setGenres(List<Genres> genres) {
    this.genres = genres;
}