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には、sitemeshを通過する* .doページがありました

<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 のサーブレットまたはフィルターにある可能性があります。そうでない場合、問題はおそらく問題のサーブレットコンテナにあります。どちらを使用していますか?

于 2010-08-05T16:14:55.540 に答える