gpt4 book ai didi

java - 将参数从操作类传递到 Liferay 中的 View 页面时出现问题

转载 作者:行者123 更新时间:2023-12-01 11:09:28 25 4
gpt4 key购买 nike

我有一个 View 页面,其中有从 Excel 工作表导入用户的按钮,因此单击导入用户按钮后,我将在我的 portlet 操作类中调用以下方法,这里我将迭代列表并调用用户创建方法来创建用户。现在我可以在数据库中创建用户。但我需要在我的 status.jsp 中显示哪些用户已创建,哪些用户未创建,即;创建用户后,我需要导航到状态页面并显示哪些已创建,哪些未创建。

因此,我在全局声明了两个数组列表,并在一个列表中添加了成功的用户创建,在另一个列表中添加了失败的用户列表,如下所示,但我收到错误,无法添加到数组列表,也无法传递数组列表到状态页面,

我的 Action 类,

  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 中的列表并以表格格式显示。

提前致谢

最佳答案

当多个用户尝试通过此操作添加用户时,Portlet 类中的两个静态列表可能会导致争用问题。

一个好的建议是在操作完成后重定向用户,这样操作就不会通过刷新页面再次触发。因此,您不能将这两个列表作为请求属性传递,因为重定向后发生的渲染将触发新的请求,因此您设置的属性消失了。

Liferay 使用用户 session 对象将成功和错误消息从操作传递到重定向后的后续 portlet 呈现。我想使用 session 是将两个列表传递到渲染阶段的一个不错的选择。

关于java - 将参数从操作类传递到 Liferay 中的 View 页面时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32547347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com