Как добавить значения в ArrayList, на который ссылается jsp:useBean?

В JSP/JSTL, как я могу установить значения для usebean класса ="java.util.ArrayList".

Если я пытаюсь использовать свойство или значение c:set, я получаю следующую ошибку: javax.servlet.jsp.JspTagException: недопустимое свойство в: "null"

1 ответ

Решение

Это невозможно напрямую. Есть <c:set> а также <jsp:setProperty> теги, которые позволяют вам устанавливать свойства в полноценном javabean через метод установки. Тем не менее 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" />

Но это мало что значит. Как ее решить правильно, зависит от единственного функционального требования. Если вы хотите сохранить некоторые List по запросу GET вы должны использовать сервлет предварительной обработки. Создайте сервлет, который выполняет следующие действия в 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> теги.

Смотрите также:

Другие вопросы по тегам