2

如果我将带有扩展字符的变量传递给我的 JSP,则呈现文件的末尾会被每个非 ascii 字符截断 2 个字节。为什么会这样?这是一个例子。

我的控制器

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class CharTestController {

    @RequestMapping(value="/chartest.do")
    public String handleRequest(ModelMap model) throws Exception {
        char var1=9829;     // Heart Char
        String var2="™";    // TM symbol
        model.addAttribute("var1", var1);
        model.addAttribute("var2", var2);
        return "chartest";
    }
}

我的 JSP

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
${var1} <c:out value="${var1}" />
${var2} <c:out value="${var2}" />
9876543210

我的输出

♥ ♥ ™ ™ 98

无论我使用还是只打印变量,因为我打印了 4 个字符,所以最后缺少 8 个字节。有任何想法吗?

4

2 回答 2

2

似乎是一个站点网格问题。我使用的是 2.2.1 版。在我的 web.xml 中,我有 *.do 页面通过 sitemesh

<filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

出于某种原因,即使它与 decorators.xml 中的模式不匹配,我猜 sitemesh 仍在解析它。

解决方案是:

  1. 在其标签中专门从站点网格中排除文件或
  2. 将站点网格升级到 2.4.1

希望这将有助于将来的某人。

于 2010-08-05T18:33:43.977 回答
0

当您将 Spring/Spring-MVC 排除在上下文之外时,您是否建议这一切都有效?

至少,尝试在 JSP 文件的最底部添加以下行来确定根本原因:

<% response.getWriter().flush(); %>

如果这解决了问题,那么问题可能确实出在 Spring MVC 的 servlet 或过滤器中。如果不是,那么问题可能更多出在所讨论的 servlet 容器中。你用的是哪一个?

于 2010-08-05T16:14:55.540 回答