2

XSLTに問題があります...

<xsl:text>&#160;</xsl:text>

その後、生成後、何らかの理由で結果の JSP ファイルに「?」が生成されます。代わりは。どうしたの?

最近のシステム変更:
Java5 -> Java6
Weblogic -> Weblogic12
Eclipse Ganymede -> Oracle Pack Eclipseに変更しました

編集 1: <xsl:output method="xml"/>、encoding=UTF-8

元の XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:include href="common.xsl"/>

    <xsl:output method="xml"/>

    ...

    <xsl:template name="makeLink">
        <xsl:variable name="fieldtype" select="name()"/>

        <xsl:variable name="currentNode"><xsl:value-of select="generate-id()"/></xsl:variable>

        <xsl:variable name="appendSpace">
            <xsl:for-each select="ancestor::ButtonList[position() = 1]/descendant::Button">
                <xsl:if test="generate-id() = $currentNode and position() &gt; 1">true</xsl:if>
            </xsl:for-each>
        </xsl:variable>

<a href="{$url}">
            <xsl:attribute name="id">btn_<xsl:value-of select="Action"/></xsl:attribute>
            <xsl:call-template name="populateAttributes">
                <xsl:with-param name="fieldtype">
                    <xsl:value-of select="$fieldtype"/>
                </xsl:with-param>
            </xsl:call-template>

            <xsl:copy-of select="@class"/>
            <xsl:copy-of select="@style"/>

            <xsl:text>&lt;span&gt;&lt;span&gt;</xsl:text><xsl:value-of select="$buffer"/><xsl:text>&lt;/span&gt;&lt;/span&gt;</xsl:text>
</a>
        <xsl:if test="not(@omitWhiteSpace)">
            <xsl:text>&#160;</xsl:text>
        </xsl:if>
        <xsl:if test="ReadOnly and ReadOnly != 'someReadOnlyMethod'
            and ReadOnly != 'someReadyOnlyMethod'
            and ReadOnly != ''">
            <xsl:text>&lt;/c:if&gt;</xsl:text>
        </xsl:if>
</xsl:template>
....

(XSLT の後) 変換され、結果の JSP ページ:

<%@ page contentType = "text/html;charset=GBK"%>
<%@ page isELIgnored = "false"%>
<%@ page language="java" 
import=" my.controller.*, my.core.config.*, my.core.datastructure.*, my.core.error.*, my.core.util.*,
my.service.Constants, my.service.modulesvr.ModuleBean, myW.sn.*, java.util.Locale, java.util.Map"%>
<%@ taglib uri="http://www.mycompany.com/my/tags/htmltag-10" prefix="html"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%MySn mySession = (MySn) session.getValue("MySn"); QuickSearchController mb = (mySession == null) ? null : (QuickSearchController)
mySession.getModuleBean(); String sessionToken = mySession.getSessionToken(); String htmlCharSet = mySession.getEncoding();
MyUsr user = mySession.getMyUsr(); String[] result; Object o;%>

.........

<a href="#" id="btn_NEWPROP" onclick="submitForm('/xxx/xxx/NEWPROP','theForm');    return (false);" class="actionBtn"><span><span>NEW PROP</span></span></a> </c:if>

EDIT 2:<xsl:text>&amp;#160;</xsl:text>代わりに使用すると<xsl:text>&#160;</xsl:text>...問題が解決したようです。JSP では   として表示され、ブラウザでは期待通りの改行なしスペースとして表示されます。

4

1 に答える 1

2

これは、エンコーディングが間違っている場合によく発生します。出力をどのエンコーディングで書いていますか?どのようにページを提供していますか? おそらく、UTF-8 でシリアライズしているのに、ISO-8859-1 (または Windows-1252) で表示しようとしている、またはその逆である可能性があります。

デフォルトのエンコーディングがどこかで変更されていないか確認してください。

あなたが言ったからといっ<xsl:output method="xml" encoding="UTF-8"/>て、プログラムがそれを尊重するわけではありません。XSLT は Java の一部に埋め込まれていますか? Java はストリーム/リーダー/ライターを制御しますか?

ファイルの一部を保存して HEX でダンプできる場合は、すぐに見つけることができるはずです。表示された場合0xC2 0xA0、ファイルは実際に UTF-8 です。ただし、単独で見る0xA0場合は、ISO-8859-1 またはその密接な関係の 1 つです。

ページが正しくレンダリングされている可能性もありますが、ページが間違ったエンコーディングで提供されています。おそらく、Firefox または Chrome で「Web 開発者 - >情報 - >応答ヘッダーの表示」で Firebug を使用するか、IE デバッグ ツールを使用して、返されたヘッダーを確認できますか。

于 2012-07-31T21:07:16.730 に答える