繁体   English   中英

使用response.sendRedirect在Liferay Portlet中进行重定向

[英]Redirection in a Liferay portlet using response.sendRedirect

我正在尝试将移动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>

SubmitForm.java

package controller;

import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;

@WebServlet("/Submit")
public class SubmitForm extends HttpServlet {
    public HttpSession getSession(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Do required initialization
        HttpSession session = null;
        session = request.getSession(false);
        return session;
    }

    // POST Method, Servlet contains NO GET Method
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String action = "";
        try {
            HttpSession session = getSession(request, response);
            String user = session.getAttribute("user");
            session.setAttribute("user", user);
            session.setAttribute("redirect", "Home");
            //session.setAttribute("redirect", "Status");
            //session.setAttribute("redirect", "Login");
            //session.setAttribute("redirect", "Error");
            response.sendRedirect("redirect.jsp");
        } catch (ServletException e) {
            System.err.println("ServletException:", e);
        } catch (IOException e) {
            System.err.println("IOException:", e);
        }
        return;
    }
}

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>

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");
    }
%>
<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中实现您的功能,然后直接发布到actionURLs而不是servlet。

Liferay的文档包含一些分步说明和文档,例如学习路径教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM