【问题标题】:inline css preventing jsp response.sendRedirect from working内联 css 阻止 jsp response.sendRedirect 工作
【发布时间】:2013-11-04 16:56:47
【问题描述】:

我的任务是为现有的 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 ----

【问题讨论】:

  • 请添加您的代码。
  • 我担心你会问这个。我们正在使用来自 Oracle CMS 的 API。不确定有多少是相关的。靠近顶部的行 包括一个外部资源,其中包含我的内联 css

标签: css jsp redirect response.redirect


【解决方案1】:

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

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

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

【讨论】:

  • 当然。我实际上根本不是 JSP 开发人员,所以我没有想到,但这正是 PHP 的逻辑。一旦某些内容输出到页面,您就无法更改标题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2016-06-05
  • 1970-01-01
  • 2012-06-12
相关资源
最近更新 更多