0

我的任务是为现有的 JSP 站点应用新的外观。

但是,我遇到了一个问题,我的 CSS 阻止了 JSP 功能——这对我来说似乎很奇怪。

基本上,JSP 中有一行代码,一旦提交表单,就会重定向页面。

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

出于开发目的,我在页眉中创建我的 CSS - 内联。当我这样做时,sendRedirect 不起作用。查看页面的源代码,我可以看到页面仅部分加载,并在我的 CSS 中途结束。(不管我放什么 CSS,页面的源代码总是以我的 CSS 结尾)

如果我将我的 CSS 移动到外部文件(最终将是),sendRederct 工作得很好。

我能想到的唯一事情是 JSP 只能处理一定数量的代码行,而我的 CSS 使页面膨胀得太多,无法处理。是这样吗?

如果不是,还有什么可能导致问题?

编辑——这是我的代码

<!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 ----
4

1 回答 1

0

所以,我认为问题在于您正在推动响应并且它正在做出响应。一旦您开始推送响应的主体并提交响应,您就不能再发送重定向,因为重定向是通过 HTTP 标头实现的(这就是 sendRedirect 的工作方式)。

因此,您需要将表单处理“向上”移动,以便更早地发生 sendRedirect。

或者,您可以尝试弄乱自动刷新和刷新缓冲区设置: <%@page buffer="xxxkb" autoflush="true" %> 但这可能不起作用。

于 2013-11-04T17:32:03.877 回答