ATG-调用checkFormRedirect时,会话或请求属性为null

时间:2019-01-31 07:54:44

标签: atg atg-dynamo oracle-commerce droplet atg-droplet

在我的ATG应用程序中,当我使用checkFormRedirect使用某些参数将用户重定向到jsp页面时,我将参数获取为null。请参见下面的FormHandler代码:

UserFormHandler:

public boolean handleUserRedirect(dynamo req, dynamo res){

//using request
req.setParameter("test", "testdata");

//using session
HttpSession session=req.getSession();  
session.setAttribute("uname","testdata"); 

//redirect to test.jsp
return checkFormRedirect("/test/test.jsp","null",req,res);
}

test.jsp:

<% out.println(session.getAttribute("uname")); %>

<% String stErrorMsg=(String)session.getAttribute("uname");%>

<%=stErrorMsg %>

<% request.getParameter("test")%>

此外,我尝试在formHandler中使用变量并设置value,但仍然将value设为null。可以帮上忙。

1 个答案:

答案 0 :(得分:1)

通常,您不能使用sendRedirect()方法发送POST请求。您可以使用RequestDispatcher在同一Web应用程序,相同上下文中使用参数转发()请求。

RequestDispatcher dispatcher = servletContext().getRequestDispatcher("test.jsp");
dispatcher.forward(request, response);

HTTP规范指出,所有重定向都必须采用 GET(或HEAD)的形式。如果安全问题,可以考虑加密查询字符串参数。另一种方法是,通过使用POST方法隐藏表单,然后在加载页面时使用javascript提交表单,即可发布到目标。

因此您可以使用会话方法:我尝试了在JSP中获得该值。

<%
      out.println(session.getAttribute("message"));
      session.removeAttribute("message");
%>
/* Or using JSTL */
  <c:out value="${sessionScope.message}" />
  <c:remove var="message" scope="session" />

屏幕截图 enter image description here

希望获得帮助。