如果我将带有扩展字符的变量传递给我的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个字节。有什么想法吗?
答案 0 :(得分:2)
似乎是一个sitemesh问题。我使用的是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 :(得分:0)
当你将Spring / Spring-MVC置于上下文之外时,你是否建议这一切都有效?
至少,尝试将以下行添加到JSP文件的最底部以确定根本原因:
<% response.getWriter().flush(); %>
如果这解决了问题,那么问题可能确实存在于Spring MVC的servlet或过滤器中。如果没有,那么问题可能在servletcontainer中更多。你在用哪一个?