<?xml version="1.0" encoding="EUC-JP"?>

<topic name="式言語（EL）のサポートされたタグの属性にマルチバイト文字が通らない" author="小川 環" date="2002.08.08">
<subsection name="概要">
<p>
Standard Taglib には、<u>式言語 ( Expression Language ) のサポートされたタグの属性に非ASCII文字が通らない不具合</u>が存在します。この問題により、日本語などのマルチバイト文字をタグの属性に直接設定することができません。属性値にマルチバイト文字を含めてタグを実行しようとすると、エラーが発生します。以下に、その例をいくつか示しておきます。
<blockquote><source>
<![CDATA[
<c:out value="${customer}" default="不明"/>
<c:if test="${customer.address.country == '日本'}">
<c:forTokens var="token" items="青,赤|緑" delims="|,">
]]></source></blockquote>
<note>
<a href="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9257" target="bugzilla">Bug 9257 ( Apache Bug Database )</a>
</note>
</p>
</subsection>
<subsection name="対象ディストリビューションおよびバージョン">
<p>
<ul>
<li>Standard Taglib v1.0 final release.</li>
<li>JSTL v1.0 RI ( included in &quot;Java Web Services Developer Pack v1.0&quot; ).</li>
<li>JSTL v1.0 RI ( included in &quot;Sun ONE Studio 4&quot; ).</li>
</ul>
<!--
<note>
なお Sun では、この不具合を JSTL v1.0 RI の既知の問題として公表しています。<br/>
詳しいことは <a href="http://java.sun.com/webservices/docs/1.0/jstl/ReleaseNotes.html" target="jwsdp">JSTL v1.0 RI のリリースノート</a> を参照してください。
</note>
-->
</p>
</subsection>
<subsection name="解決方法１　最新バージョンにアップグレードする">
<subsection name="任意のコンテナ上で Standard Taglib を利用している場合">
<p>
Standard Taglib の <a href="http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/" target="download">Release Distribution</a> より、最新バージョン ( v1.0.1 ) をダウンロードしてください。<br/>
その後、&lt;ドキュメントルート&gt;/WEB-INF/lib ディレクトリに配置された古いJARファイルを新しいものと入れ替え、Webアプリケーションを再起動してください。
</p>
</subsection>
<subsection name="Java Web Services Developer Pack を利用している場合">
<p>
Java Web Services Developer Pack v1.0_01 にアップグレードしてください。<br/>
このリリースには、JSTL RI v1.0.1 ( = Standard Taglib v1.0.1 ) がバンドルされています。
</p>
</subsection>
<!--
<p>
Standard Taglib の <a href="http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/" target="download">Release Distribution</a> より、最新バージョン ( v1.0.1 ) をダウンロードしてください。<br/>
その後、&lt;ドキュメントルート&gt;/WEB-INF/lib ディレクトリに配置された古いJARファイルを新しいものと入れ替え、Webアプリケーションを再起動してください。
</p>
<note>
<s>Standard Taglib の次回リリース ( v1.0.1 ) にて、この問題は解決される予定です。</s>
</note>
<note>
Java Web Services Developer Pack v1.0 をお使いの場合、v1.0_01 にアップグレードしてください。<br/>
この最新リリースには、JSTL RI v1.0.1 ( = Standard Taglib v1.0.1 ) がバンドルされています。
</note>
-->
</subsection>
<subsection name="解決方法２　ソースコードを修正する（ 最新バージョンにアップグレードできない場合 )">
<p>
この不具合は、式言語 ( Expression Language ) の構文解析器 ( 以下、<b>ELParser</b> ) の実装に原因があります。
<b>ELParser</b> のソースコードは <b>JavaCC</b> というツールで生成されています。
生成されるソースコードの元となっている &lt;src&gt;/org/apache/taglibs/standard/lang/jstl/<b>ELParser.jj</b> というファイルの一部を修正することで、この問題は解決します。以下に、修正箇所を示します。
<blockquote><source>
<![CDATA[
options {
  JAVA_UNICODE_ESCAPE = false;
  UNICODE_INPUT = true;         -> このオプションを追加。
  STATIC = false;
}
]]></source></blockquote>
<b>ELParser.jj</b> を修正した後、これを <b>JavaCC</b> でビルドしてください。そうすると、次の Java ソースファイルが自動的に生成されます。
<ul>
<li>ELParser.java</li>
<li>ELParserConstants.java</li>
<li>ELParserTokenManager.java</li>
<li>ParseException.java</li>
<li>SimpleCharStream.java</li>
<li>Token.java</li>
<li>TokenMgrError.java</li>
</ul>
最後に、生成された上記のソースファイルを &lt;src&gt;/org/apache/taglibs/standard/lang/jstl/parser ディレクトリに上書きコピーし、再コンパイルしてください。
<note>
<b>JavaCC</b> は、<a href="http://www.webgain.com/products/java_cc/" target="tool">こちらのサイト</a>より入手することができます。
</note>
</p>
</subsection>
</topic>
