・struts2を使用
・入力された文字列と単位を出力する
・文字列が「 _ 」の場合は、単位を出力しない
以下のような形でデータ出力している。
<s:property value="number"/>
<s:if test="number!= '_'"><s:property value="unit"/></s:if>
【事象】
特定の文字列「95」を入力すると、単位表示がされない。
例)
33円
50円
62円
87円
95
100円
【原因】
struts2では、文字列が一文字の場合、シングルコーテーションで囲むと
char型で判断される。
http://mofuken.blogspot.com/2009/07/struts2-sifognl.html
囲んでいるため、
http://homepage2.nifty.com/miyuki-t/html/cardinalnum.html
ハイフンの文字コードが16進数だと5Fで、10進数であらわすと「95」
「95の値が入力されたとき「_」と同じと判断されて単位表示が
されなくなる。
char型
Javaでは、文字を扱うための型として、charが用意されています。char型は、Unicodeの1文字分と同じく、16ビットで表現します。
char型は、整数型の一種です。char型には0以上、65535以下の整数値が入ります。具体的には、整数値として、Unicode文字のコード番号を入れて使います。
文字を扱う型と言っても、その実体は整数ですから、整数に関して実行可能な演算は、char型に関しても実行可能です。つまり、加減乗除、剰余、比較などが行えます。
文字リテラル
char型の値を表すのには、文字リテラルが使用できます。文字リテラルは、1個の文字をシングル・クォート(')で囲んで表します。例えば、
'A'
は文字リテラルです。
引用元:http://www.itarchitect.jp/beginners/-/10422-2.html
【解決方法】
下のブログにあるようにダブルコーテーションで囲むと文字列として
解釈されるので、回避できる。
http://mofuken.blogspot.com/2009/07/struts2-sifognl.html
結果的にソースとしては↓みたいにしたら直った。
<s:property value="number"/>
<s:if test="number!= \"_\""><s:property value="unit"/></s:if>
0 件のコメント:
コメントを投稿