2015-11-06 39 views
0

我试图将移动web应用程序移植到liferay中。我设法移植了大部分代码,但问题是转换继续全屏。使用response.sendRedirect在Liferay portlet中重定向

我已经使用的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> 

回答

0

我不是完全地肯定我明白你的意思。但我认为你的意思是显示出不同的JSP,如果多数民众赞成的问题,然后在doView方法可以做到这一点

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

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

这将使page.jsp代替portlet.xml中当前所指定的JSP呈现

0

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

恕我直言,你应该

  • 假身份管理到Liferay
  • 如果你坚持用Liferay的(或只是当你想反正重新实现底层基础架构不使用门户):实现你的功能在portlet中直接POST到actionURLs而不是servlet。

Liferay的文档有几个分步说明和文档,例如, Learning PathsTutorials

+0

我没有实现这个。这是一个现有的应用程序,客户希望“添加”远程Liferay portlet以利用相同的用户数据库和访问权限和功能。我正尝试将此移动应用程序客户端移植到Liferay portlet客户端中。 –