Java 使用response.sendRedirect在Liferay portlet中重定向

Java 使用response.sendRedirect在Liferay portlet中重定向,java,redirect,mobile,liferay,portlet,Java,Redirect,Mobile,Liferay,Portlet,我正在尝试将一个移动web应用程序移植到liferay中。我已经成功地移植了大部分代码,但问题是传输一直在全屏进行 我读过关于使用portlet:actionURL的各种帖子,这似乎解决了一个有其他参数的较长用户的问题,但它使我的浏览器陷入了一个空白屏幕的循环中 login.jsp <form id="loginForm" action="<%= PortalUtil.getPathContext(request) + "/Submit" %>" method="post" a

我正在尝试将一个移动web应用程序移植到liferay中。我已经成功地移植了大部分代码,但问题是传输一直在全屏进行

我读过关于使用portlet:actionURL的各种帖子,这似乎解决了一个有其他参数的较长用户的问题,但它使我的浏览器陷入了一个空白屏幕的循环中

login.jsp

<form id="loginForm" action="<%= PortalUtil.getPathContext(request) + "/Submit" %>" method="post" autocomplete="off">
    <label for="userid">User Number</label>
    <input type="number" name="userid" id="userid" pattern="[0-9]*" value="">

    <label for="userpass">Password</label>
    <input type="password" name="userpass" id="userpass" value="">

    <button type="submit" name="submit" value="submit" data-theme="a">Submit</button>
</form>
redirect.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
    String url = (String) session.getAttribute("redirect");
    System.out.println("redirect.jsp:url=" + url);
    if (null == url)
      url = "index.jsp";
    else
      session.removeAttribute("redirect");
%>
<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <script type="text/javascript">
      window.location.href = "<%=url%>";
    </script>
  </body>
</html>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
    String url = (String) session.getAttribute("redirect");
    System.out.println("redirect.jsp:url=" + url);
    if (null == url) {
        url = "index.jsp";
    } else {
        session.removeAttribute("redirect");
    }
%>
<portlet:actionURL var="portleturl" >
  <portlet:param name="jspPage" value="/portlet/<%=url%>"/>
</portlet:actionURL>
<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <script type="text/javascript">
            //window.location.href = "<%=url%>";
            console.log("${portleturl}");
            window.location.href = "${portleturl}";
        </script>
    </body>
</html>
web.xml

<servlet>
  <servlet-name>status-jsp</servlet-name>
  <jsp-file>/status.jsp</jsp-file>
</servlet>
<servlet-mapping><servlet-name>status-jsp</servlet-name><url-pattern>/Status</url-pattern></servlet-mapping>
<servlet>
  <servlet-name>home-jsp</servlet-name>
  <jsp-file>/home.jsp</jsp-file>
</servlet>
<servlet-mapping><servlet-name>home-jsp</servlet-name><url-pattern>/Home</url-pattern></servlet-mapping>
<servlet>
  <servlet-name>login-jsp</servlet-name>
  <jsp-file>/login.jsp</jsp-file>
</servlet>
<servlet-mapping><servlet-name>login-jsp</servlet-name><url-pattern>/Login</url-pattern></servlet-mapping>
<servlet>
  <servlet-name>error-jsp</servlet-name>
  <jsp-file>/error.jsp</jsp-file>
</servlet>
<servlet-mapping><servlet-name>error-jsp</servlet-name><url-pattern>/Error</url-pattern></servlet-mapping>
新的 redirect.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
    String url = (String) session.getAttribute("redirect");
    System.out.println("redirect.jsp:url=" + url);
    if (null == url)
      url = "index.jsp";
    else
      session.removeAttribute("redirect");
%>
<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <script type="text/javascript">
      window.location.href = "<%=url%>";
    </script>
  </body>
</html>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
    String url = (String) session.getAttribute("redirect");
    System.out.println("redirect.jsp:url=" + url);
    if (null == url) {
        url = "index.jsp";
    } else {
        session.removeAttribute("redirect");
    }
%>
<portlet:actionURL var="portleturl" >
  <portlet:param name="jspPage" value="/portlet/<%=url%>"/>
</portlet:actionURL>
<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <script type="text/javascript">
            //window.location.href = "<%=url%>";
            console.log("${portleturl}");
            window.location.href = "${portleturl}";
        </script>
    </body>
</html>

我不能完全肯定我理解你的意思。但是我认为您的意思是显示一个不同的jsp,如果这是一个问题,那么在doView方法中您可以这样做

final String jspurl = "/html/page/page.jsp";

                getPortletContext().getRequestDispatcher(jspurl).include(renderRequest, renderResponse);

这将呈现page.jsp,而不是portlet.xml中为当前呈现指定的jsp

您似乎在servlet中实现某种简化的登录-正如您提到的Liferay:Liferay已经很好地处理了身份管理,我不明白您为什么要在其上创建自己的身份管理。此外,您正在门户中实现一个servlet——这没有多大意义。当您从servlet的JSP创建portletURL(例如actionURL)时,我不确定portletURL的所有必要上下文是否在servlet中可用

我知道你该怎么做

将身份管理留给Liferay,或者在您仍要重新实现底层基础架构时不要使用门户 如果您坚持使用Liferay:在portlet中实现您的功能,并直接发布到ActionURL,而不是servlet。
Liferay的文档包含多个分步说明和文档,例如和

我不执行此操作。它是一个现有的应用程序,客户希望添加一个远程Liferay portlet,以利用相同的用户数据库和访问权限以及访问的功能。我正在尝试将此移动应用程序客户端移植到Liferay portlet客户端。