【问题标题】:how to access variables in .jsp passed from a servlet?如何访问从 servlet 传递的 .jsp 中的变量?
【发布时间】:2014-02-11 18:41:49
【问题描述】:

我有一个对象列表,我从 servlet 传递到 jsp,如下所示:

List<LifeEvent> lifeEvents = null;
if (initialDate.equals(finalDate))
lifeEvents = ontAccess.getPhotosOfTheDay(initialDate,null);
else
lifeEvents = ontAccess.getPhotosOfTheDay(initialDate,finalDate);

request.setAttribute("lifeEvents", lifeEvents);

LifeEvent 类具有以下全局变量:

@Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private long id;

    @OneToOne(optional = true, cascade = {CascadeType.ALL})
    @JoinColumn
    private IDContainer idContainer;

    @ManyToOne(optional = true, cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE})
    private Place place;

    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE}, fetch = FetchType.EAGER)
    @Fetch(value = FetchMode.SUBSELECT)
    private List<Comment> comments;

    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE}, fetch = FetchType.EAGER)
    @Fetch(value = FetchMode.SUBSELECT)
    @JoinTable(name = "lifeevent_withFriends")
    private List<Friend> withFriends;

    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE}, fetch = FetchType.EAGER)
    @Fetch(value = FetchMode.SUBSELECT)
    @JoinTable(name = "lifeevent_likedBy")
    private List<Friend> likedBy;

    private String text;

    private boolean highlyRelevant = false;


    @ManyToOne(optional=true, cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE})
    @JoinColumn
    private MediaObject mediaObject;


    private boolean archived=false;

例如 Place 对象有以下全局变量:

@Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private long id;

    @OneToOne(optional = true, cascade = {CascadeType.ALL})
    @JoinColumn
    protected IDContainer idContainer;

    private boolean isPublic;

    private String placeName;

    @ManyToOne
    private MediaObject media;

    @ManyToOne(optional = true, cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE})
    private Location location;

    private boolean archived=false;

在 .jsp 页面中,我想显示有关 LifeEvent 的信息,例如,我希望访问 LifeEvent 类中 Place 内的地名。我怎样才能访问它?

只是 ${lifeEvent.place.placeName} 吗?

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

    零是一个非常好的数字。不要将List 初始化为null。将其初始化为一个空列表。 isPublic 不是布尔值的好名字。

    由于您已将lifeEvents 设为请求属性,因此您可以使用JSTL c:forEach JSP 标记来遍历列表:

    <table>
        <thead>
            <tr>
                <th>Place Name</th>
                <th>Public</th>
            </tr>
        </thead>
        <tfoot>
            <tr>
                <th colspan="2">${fn:length(lifeEvents)} Events</th>
            </tr>
        </tfoot>
        <tbody>
            <c:forEach items="${lifeEvents}" var="event">
                <tr>
                    <td>${event.place.placeName}</td>
                    <td>${event.place.isPublic}</td>
                </tr>
            </c:forEach>
         </tbody>
    </table>
    

    当然,您需要导入 JSTL 核心标签库。

    【讨论】:

    • 谢谢,那行得通。如果 placeName 是一个街道列表,例如,我如何在你提供的 foreach 循环中遍历该列表?
    • @JoaoFilipeClementeMartins 您可以使用 c:forEach 嵌套在街道上。如果对您有帮助,您应该接受作为答案。
    • 我会的,先生。不要误会我的意思。只是当我想我不能我不得不等待然后我忘记了
    • 如果你想遍历一个列表,你可以嵌套&lt;c:forEach&gt;标签。只需为 var 参数使用不同的名称。还可以考虑重构您的代码。看看 JSTL 格式化库。
    猜你喜欢
    • 2013-06-10
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2012-03-18
    • 2023-03-09
    相关资源
    最近更新 更多