使用JSTL编写静态内容

时间:2012-08-21 02:23:13

标签: java jstl scriptlet

处理程序并尝试从另一个类打印静态整数。奇怪的是我可以使用scriptlet,但不能使用JSTL。看看我刚写的错误检查代码。

Comments: <%=Comments.getCommentCount() %> <br />
Comments: ${Comments.getCommentCount()} <br />
Comments: <c:out value="${Comments.getCommentCount()}" /> <br />
Comments: <c:out value="1" />

这给了我一个HTML输出

Comments: 5 <br />
Comments:  <br />
Comments:  <br />
Comments: 1

因此,您只能看到第一行和最后一行代码的工作原理。如何在没有scriptlet的情况下打印出这个静态变量?

在我的标题中我有

import="org.test.Comments"

Comments.java

package org.test;

import java.util.ArrayList;
import java.util.Collections;

public class Comments 
{
    private String name = "";
    private String comment = "";
    private static ArrayList<String> allComments = new ArrayList<String>();


    public void setNewComment(String name, String comment)
    {
        this.name = name;
        this.comment = comment;
        allComments.add(getComment());
    }

    public static ArrayList<String> getCommentList()
    {
        Collections.reverse(allComments);
        return allComments;
    }


    public static int getCommentCount()
    {
        return allComments.size();
    }


    public String getComment()
    {
        return String.format("Name:   %s <br />Comment:  %s <p><hr /></p>", name, comment);
    }
}

2 个答案:

答案 0 :(得分:4)

您无需在jstl中调用getter。就这样做

<c:out value="${Comments.commentCount}" /> 

假设您的变量名称为commentCount而不是CommentCount

即使没有<c:out>

也可以
Comments: ${Comments.commentCount} <br />

但使用<c:out>会更好,以避免跨网站脚本编写,如here所述

<强>更新

在您提到的课程中,没有名称为commentCount的字段。所以它不会起作用。您可以使用jsp fn标签直接在jsp中获取集合的大小。

将其包含在标题

  <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

然后执行此操作:

  <c:out value="${fn:length(allComments)}" /> 

 Comments: ${fn:length(allComments)} <br />

这应该有用。

答案 1 :(得分:0)

如果要使用静态方法,则可以使用自定义EL函数。 查看页面底部附近的https://stackoverflow.com/tags/el/info