Показать Arraylist на странице jsp - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь отобразить следующий ArrayList на показанной странице. jsp, но я не вижу никаких значений после запуска своего портлета, в чем проблема?

code. java

 public class TestPortlet extends MVCPortlet {
    public void displayProcess(ActionRequest request, ActionResponse response) {
        ArrayList<String> process = new ArrayList<>();
        process.add("a");
        process.add("b");
        process.add("c");
        process.add("d");
        process.add("e");

        request.setAttribute("processName", process);
    }
}

Страница jsp выглядит так:

<%@ include file="/init.jsp"%>

<jsp:useBean id="processName" class="java.util.ArrayList" scope="request" />

<aui:select id="process" name="processitems">
    <c:forEach items="${processName}" var="process">
        <aui:option value="${process}">
            ${process}
        </aui:option>
    </c:forEach>
</aui:select>

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Не уверен, если это полный ответ, но некоторые шаги, чтобы выяснить, в чем проблема. Я отвечаю на ваш вопрос, а также на несколько комментариев:

Вы реализуете обработчик действий портлета, оттуда вы не будете пересылать / отправлять определенному jsp: фаза ACTION портлета только хорошо для изменения состояния, при этом отображение результата является частью фазы VIEW. Код, который вы опубликовали (хотя он, очевидно, упрощен), выглядит так, как будто он хочет жить в doView().

На самом деле это может быть все, что вам нужно: если вы просто отображаете портлет, только фаза ПРОСМОТРА будет запущена. Простое отображение портлета не вызовет срабатывания обработчика действий, который вы можете проверить в отладчике.

Для JSP: все, что вы говорите, это то, что вы "не можете видеть" любой из результатов. Проверьте, где ваша проблема: есть ли список? Работает ли перечисление списка? У вас проблемы с тегом AUI? Вы можете легко проверить это, удалив все остальные теги и, скорее, сгенерировав чистый вывод, удалив бит.

Когда вы смотрите на источник вывода и любой из JSP элементов сохраняется (например, ${processName}) или <aui:select..>, <c:forEach...>, тогда вы поймете, что это причина root для того, чтобы «ничего не видеть». Вы можете пропустить taglib или другое.

Последнее: я никогда попробовал это, но <aui:select> - это тег, который должен использоваться внутри формы, и я не уверен, что он делает вне формы - вы можете захотеть окружить его <aui:form ....> и посмотреть, что будет потом.

0 голосов
/ 24 апреля 2020

Я нашел решение:

Я должен был использовать:

public void displayProcess(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {

вместо

 public void displayProcess(ActionRequest request, ActionResponse response) {

и в нижней части моего метода следующее:

renderRequest.setAttribute("process", process); 
    super.render(renderRequest, renderResponse);

На странице jsp, в самой верхней точке; получите ArrayList, который вы передаете как:

<% ArrayList<String> process = (ArrayList) request.getAttribute("process"); %>

.

Результаты следующие:

ArrayList on jsp, liferay

...