2013-11-04 3 views
0

기존 JSP 사이트에 새로운 모양과 느낌을 적용해야했습니다.jsp response.sendRedirect가 작동하지 않도록 인라인 CSS가 처리되었습니다.

그러나 내 CSS가 JSP 기능을 방해하는 문제가 있습니다. 어느 것이 나에게는 매우 이상하게 보입니다.

기본적으로 JSP에 양식이 제출되면 페이지를 리디렉션하는 코드 줄이 있습니다.

String redirectUrl = "Absolute path to next page" 
response.sendRedirect(redirectUrl); 

개발 목적으로 페이지 머리 인라인에 CSS를 작성합니다. 이렇게하면 sendRedirect가 작동하지 않습니다. 페이지의 소스를 보면 페이지의 일부만로드되고 내 CSS의 절반이 끝나는 것을 볼 수 있습니다. (그것은 CSS에 무엇을 넣든 상관 없습니다. CSS의 끝은 항상 CSS로 끝납니다.)

CSS를 외부 파일로 이동하면 sendRederct가 올바르게 작동합니다.

내가 생각할 수있는 유일한 일은 JSP가 특정 코드 줄 수를 처리 할 수 ​​있으며 내 CSS가 페이지를 너무 많이 처리하여 처리 할 수 ​​없다는 것입니다. 그럴까요?

그렇지 않은 경우 문제의 원인은 무엇입니까?

편집 - 여기 그래서, 문제가 당신이 응답에 밀고하고 응답을 저지르고 있다고 믿습니다 MY 코드

<!DOCTYPE HTML> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-GB"> 
<head> 
    <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> 
    <meta charset="utf-8" /><%@include file="/WEB-INF/ss_layout_head_info.jsp"%> 

    <%=serverbean.evalResInc("internet_2.0_opening_head_content")%> 
    <%-- Instantiate the form validation bean and supply the error message map --%> 
    <%@ page import="company.forms.FeedbackFormBean" %> 
    <%@ page import="java.util.*" %> 
    <% 
     java.util.Map errorMap = new java.util.HashMap();; 
     errorMap.put(FeedbackFormBean.ERR_FULLNAME_ENTER, serverbean.evalIdcScp("langRef(#active.ssLanguage, \"ww2SpecifyFullName\")")); 
     errorMap.put(FeedbackFormBean.ERR_EMAIL_ENTER, serverbean.evalIdcScp("langRef(#active.ssLanguage, \"ww2SpecifyEmailAddress\")")); 
     errorMap.put(FeedbackFormBean.ERR_EMAIL_INVALID, serverbean.evalIdcScp("langRef(#active.ssLanguage, \"ww2EmailAddressNotValid\")")); 
     errorMap.put(FeedbackFormBean.ERR_COMMENTS_ENTER, serverbean.evalIdcScp("langRef(#active.ssLanguage, \"ww2SpecifyComments\")")); 
     errorMap.put(FeedbackFormBean.ERR_POSSIBLE_SPAM, serverbean.evalIdcScp("langRef(#active.ssLanguage, \"ww2PossibleSpamInput\")")); 
    %> 

    <%String httpAbsoluteCgiPath = serverbean.evalIdcScp("HttpAbsoluteCgiPath");%> 
    <%String siteId = serverbean.evalIdcScp("siteId");%> 
    <%String nodeId = serverbean.evalIdcScp("nodeId");%> 
    <%String fs = serverbean.evalIdcScp("fs");%> 

    <jsp:useBean id="form" class="company.forms.FeedbackFormBean" scope="request"> 
     <jsp:setProperty name="form" property="errorMessages" value='<%= errorMap %>'/> 
     <jsp:setProperty name="form" property="siteId" value='<%= siteId %>'/> 
    </jsp:useBean> 

    <%if ("true".equals(request.getParameter("process"))) { %> 
     <jsp:setProperty name="form" property="*" /> 
     <%if (form.process()) { 
      serverbean.putLocal("fullName", form.getFullName()); 
      serverbean.putLocal("email", form.getEmail()); 
      serverbean.putLocal("phone", form.getPhone()); 
      serverbean.putLocal("comments", form.getComments()); 
      serverbean.putLocal("dUser", "sysadmin"); 

      serverbean.putLocal("IdcService", "INTERNET_2.0_CHECKIN_FEEDBACK_RESPONSE"); 
      serverbean.executeService(); 

      // Go to success page 
      String redirectUrl = httpAbsoluteCgiPath + "?IdcService=SS_GET_PAGE&nodeId=" + siteId + "FeedbackForm&fs=1"; 
      response.sendRedirect(redirectUrl); 
      return; 
     } 
    } 

    ---- DON'T THINK YOU WILL NEED ANYTHING PAST HERE ---- 
+0

코드를 추가하십시오. –

+0

당신이 그걸 물어볼 까봐 두려웠습니다. 우리는 Oracle CMS의 API를 사용하고 있습니다. 얼마나 관련이 있는지 잘 모릅니다. <% = serverbean.evalResInc ("internet_2.0_opening_head_content") %>라는 맨 위에있는 행에는 내 인라인 CSS가 포함 된 외부 리소스가 포함되어 있습니다 – Typhoon101

답변

0

입니다. 응답의 본문을 시작하고 커밋되면 HTTP 헤더를 통해 리디렉션이 이루어 지므로 더 이상 리디렉션을 보낼 수 없습니다 (sendRedirect의 작동 방식).

따라서 sendRedirect가 먼저 발생하도록 양식 처리를 '위로'이동해야합니다.

선택적으로 자동 플러시 및 버퍼 플러시를 혼란스럽게 시도 할 수 있습니다. <%@page buffer="xxxkb" autoflush="true" %> 하지만 작동하지 않을 수 있습니다.

+0

물론. 나는 실제로 JSP 개발자가 아니기 때문에 나에게 일어난 것이 아니지만 PHP와는 정확히 같은 논리이다. 페이지에 무엇인가가 출력 되 자마자 헤더를 변경할 수 없습니다. 당신의 도움을 주셔서 감사합니다. – Typhoon101