Проблема при передаче параметров из класса действия на страницу просмотра в Liferay

У меня есть страница просмотра, на которой у меня есть кнопка для импорта пользователей из листа Excel. Поэтому при нажатии кнопки импорта пользователей я вызываю следующий метод в своем классе действий портлета. Здесь я повторяю список и вызываю метод создания пользователя для создать пользователей. Теперь я могу создавать пользователей в базе данных. Но мне нужно показать, какие пользователи созданы, а какие не созданы в моем статусе.jsp, т.е. После создания пользователя мне нужно перейти на страницу состояния и отобразить, какие из них созданы, а какие нет.

Итак, я объявил два списка массивов глобально и добавил успешное создание пользователя в один список и неудачный список пользователей в другой список, как показано ниже, но я получаю сообщение об ошибке и не могу добавить в arraylist и не могу передать arraylist на страницу состояния ,

Мой класс действий,

  static ArrayList<String> successList;
    static ArrayList<String> failureList;

      public void addUser(ActionRequest request, ActionResponse response) 
                throws IOException, PortalException, SystemException {
    successList = new ArrayList<String>();
    failureList = new ArrayList<String>();
    while (iterator.hasNext()) {
     userCreation(themeDisplay, serviceContext, values.get(Field.Project_Name), values.get(Field.Project_Status), values.get(Field.Start_Date),
                            values.get(Field.End_Date), values.get(Field.Company_Name), values.get(Field.PM_FirstName), values.get(Field.PM_MiddleName),
                            values.get(Field.PM_LastName), values.get(Field.PM_Email), values.get(Field.PM_Password), values.get(Field.PM_Role), values.get(Field.PM_Status));

    }
      request.setAttribute("successList", successList);      request.setAttribute("failureList", failureList); response.setRenderParameter("mvcPath","/html/status.jsp");

    }
  public static void userCreation(ThemeDisplay themeDisplay, ServiceContext serviceContext,
                String Project_Name, String Project_Status, String Start_Date, String End_Date, String Company_Name,
                String FirstName, String MiddleName, String LastName, String Email, String Password,
                String Role, String Status) throws PortalException, SystemException
        {
     String result = null;
      try {
                    System.out.println("Try Bolck Start");

                    User newUser = UserLocalServiceUtil.addUser(creatorUserId, companyId, autoPassword, Password,
                            Password, autoScreenName, screenName, Email, facebookId, openId,
                            locale, FirstName, MiddleName, LastName, prefixId, suffixId, male,
                            birthdayMonth, birthdayDay, birthdayYear, role, groupIds,
                            organizationIds, roleIds, userGroupIds, sendEmail, serviceContext);

                    long newUserID = newUser.getUserId();
        result = "The User "+ Email + " is created ";
                    successList.add(result);

            } catch(Exception e){

                    result = "The User "+ Email + " is not created ";
                    failureList.add(result);
            }   
    }

Статус.jsp:

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<portlet:defineObjects />

<%
String success = (String)request.getAttribute("successList");
String failure = (String)request.getAttribute("failureList");
if(success!= null && !success.isEmpty())
{
    out.println("Following users are created successfully");
    out.println(success);   
    out.println();
}
if(failure!= null && !failure.isEmpty())
{
    out.println("Following users are not created ");
    out.println(failure);
    out.println();
}

%>

Также как я могу отправить свой список в виде списка вместо строки, чтобы я мог повторять список в status.jsp и отображать в формате таблицы.

заранее спасибо


person Vinod    schedule 13.09.2015    source источник


Ответы (1)


Два статических списка в классе портлета могут привести к конфликтам, когда несколько пользователей пытаются добавить пользователей с помощью этого действия.

Хорошим предложением является перенаправление пользователя после завершения действия, чтобы действие не могло быть запущено снова путем обновления страницы. Поэтому вы не можете передать два списка в качестве атрибута запроса, потому что рендеринг, который происходит после перенаправления, вызовет новый запрос, и поэтому установленные вами атрибуты исчезнут.

Liferay передает сообщения об успехах и ошибках от действий в последующую визуализацию портлета после перенаправления с помощью объектов сеанса пользователя. Я предполагаю, что использование сеанса - хороший вариант для передачи ваших двух списков на фазу рендеринга.

person Tryfon    schedule 13.09.2015
comment
Не будет никаких проблем, если вы одновременно передаете два/более списка через объект запроса. - person Parkash Kumar; 13.09.2015