Как добавить значения в ArrayList, на который ссылается jsp: useBean? - PullRequest
1 голос
/ 17 мая 2011

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

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

1 Ответ

2 голосов
/ 17 мая 2011

Это напрямую невозможно. Существуют теги <c:set> и <jsp:setProperty>, которые позволяют вам устанавливать свойства в полноценном javabean с помощью метода установки. Однако интерфейс List не имеет установщика, а только метод add().

A обходной путь будет заключаться в том, чтобы обернуть список в настоящий 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>.

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

...