【问题标题】:Write Static Content With JSTL使用 JSTL 编写静态内容
【发布时间】:2012-08-16 08:58:55
【问题描述】:

正在处理一个程序并尝试从另一个类打印一个静态整数。奇怪的是我可以用 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"

评论.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);
    }
}

【问题讨论】:

    标签: java jstl scriptlet


    【解决方案1】:

    你不需要在 jstl 中调用 getter。就这样做

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

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

    即使没有&lt;c:out&gt;,它也可以工作

    Comments: ${Comments.commentCount} <br />
    

    但使用&lt;c:out&gt; 会更好,以避免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 />
    

    这应该可行。

    【讨论】:

    • 如果您的 Comments 类有一个字段 commentCount,它应该可以工作。你能把jsp和类添加到问题中吗?
    • 已添加,为了测试我们的想法,我尝试添加此 [private static int one = 1; ] 和这个 [ ${Comments.one} ] 作为一个简单的测试,但它不起作用
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多