2

JSP/JSTL で、class="java.util.ArrayList" の usebean に値を設定するにはどうすればよいですか。

c:set プロパティまたは値を使用しようとすると、次のエラーが発生します: javax.servlet.jsp.JspTagException: Invalid property in : "null"

4

1 に答える 1

2

それは直接不可能です。setter メソッドを介して完全な JavaBean にプロパティを設定できる タグ<c:set>とタグがあります。<jsp:setProperty>ただし、Listインターフェイスにはセッターがなく、add()メソッドのみがあります。

回避策は、次のように実際の JavaBean でリストをラップすることです。

public class ListBean {

    private List<Object> list = new ArrayList<Object>();

    public void setChild(Object object) {
        list.add(object);
    }

    public List<Object> getList() {
        return list;
    }
}

そしてそれを設定する

<jsp:useBean id="listBean" class="com.example.ListBean" scope="request" />
<jsp:setProperty name="listBean" property="child" value="foo" />
<jsp:setProperty name="listBean" property="child" value="bar" />
<jsp:setProperty name="listBean" property="child" value="waa" />

しかし、それはほとんど意味がありません。それを正しく解決する方法は、唯一の機能要件に依存します。ListGET リクエストで一部を保持したい場合は、前処理サーブレットを使用する必要があります。doGet()メソッドで次のことを行うサーブレットを作成します。

List<String> list = Arrays.asList("foo", "bar", "waa");
request.setAttribute("list", list);
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);

URL でサーブレットを呼び出すと、リストは転送された JSP にあり、

${list}

昔ながらの<jsp:useBean>タグは必要ありません。サーブレットでは、通常の方法で Java コードを自由に記述できます。このようにして、タグによっていくつかの前処理ロジックをガブリング/ハックする必要なく、純粋なプレゼンテーションのみに JSP を使用でき<jsp:useBean>ます。

以下も参照してください。

于 2011-05-17T00:36:33.707 に答える