Spring MVC рендерится JSP урезанным, когда содержит специальные символы - PullRequest
2 голосов
/ 05 августа 2010

Если я передаю переменные с расширенными символами в мой JSP, конец отображаемого файла усекается на 2 байта для каждого символа, отличного от ascii. Почему это так? Вот пример.

Мой контроллер :

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 байтов отсутствуют в конце. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 05 августа 2010

Кажется, проблема с сеткой. Я использовал версию 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. специально исключить файл из sitemesh в его теге или
  2. обновление sitemesh до 2.4.1

Надеюсь, это поможет кому-то в будущем.

0 голосов
/ 05 августа 2010

Вы предлагаете, чтобы все это работало, когда вы оставляете Spring / Spring-MVC вне контекста?

По крайней мере, попробуйте добавить следующую строку в самый конец файла JSP, чтобы определить основную причину:

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

Если это устранит проблему, то проблема, вероятно, действительнов сервлете или фильтре Spring MVC.Если нет, то проблема, вероятно, больше в рассматриваемом сервлет-контейнере.Какой из них вы используете?

...