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

ATG - session or request attribute coming as null when checkFormRedirect is called

在我的 ATG 应用程序中,当我使用 checkFormRedirect 使用一些参数将用户重定向到 jsp 页面时,我得到的参数为空。请看下面的 FormHandler 代码:

用户表单处理程序:

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 中使用变量并设置值,但我仍然将值设置为 null。可以帮忙吗。

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

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

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

所以你可以使用会话方法:我试过了我得到了JSP中的值。

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

截图

希望对您有所帮助。