2015-11-06 40 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客戶端中。 –