まずは以下のコードを見てほしい。
public class Foo implements Serializable { public FooEnum getEnum() { return new FooEnum(); } }一見なんの変哲もないBeanである。実際何の変哲もない(勘のいい方はもう気づいたかも・・・)。
問題はこのBeanをJSPで使うと起きるのである。 以下がJSP。Fooのインスタンスfooをどっかから受け取っているという前提。
${foo.enum}これ、JSP2.1ではOKで、JSP2.2ではNG。理由は'enum'は識別子として認識しないから。JSP2.2で書きたかったら以下のように直接メソッドを呼ぶ必要がある。
${foo.getEnum()}問題はJSP2.1はメソッドの直接呼出しをサポートしていないということ。つまり、JSP2.1で合法にすると、JSP2.2では非合法になる。逆も同様。逃げ場なし。
どうしたか?直接Javaコードを書きなぐりましたよ・・・
開発環境をTomcat 6からTomcat 7にしたら発生した逃げ場のない不具合。そりゃTomcat 7だけサポートするなら別に問題ないんだけど、他のサーバー(JBossとか)がどのバージョンのJSPをサポートしているか分からないので、どれでも動くようにする必要があるんだよ・・・なんでJavaにはCみたいなマクロがないんだろう。バージョン違いの非互換をどうにかする方法がないなんて・・・
No comments:
Post a Comment