1

プログラムで作業していて、別のクラスから静的整数を出力しようとしています。奇妙なことに、スクリプトレットでは実行できますが、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

ご覧のとおり、コードの最初と最後の行だけが機能します。スクリプトレットなしでこの静的変数を出力するにはどうすればよいですか?

そして私のヘッダーには

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);
    }
}
4

2 に答える 2

4

jstl 内で getter を呼び出す必要はありません。これをするだけ

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

変数名がcommentCountではなくであると仮定しますCommentCount

なくても機能します<c:out>

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

ここで<c:out>説明されているように、クロスサイトスクリプティングを避けるために、使用する方が良いでしょう

アップデート

あなたが言及したクラスには、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 />

これはうまくいくはずです。

于 2012-08-21T02:38:44.240 に答える
0

静的メソッドを使用する場合は、カスタム EL 関数を使用できます。 ページの下部にあるhttps://stackoverflow.com/tags/el/infoを見て ください。

于 2012-08-21T04:16:39.263 に答える