0

主に JSP で構築された Web サイトを Websphere から Jetty に移動しようとしています。属性NullPointerExceptionの EL コードの評価に問題があります。test

<c:if test="${requestScope.domainSpecificName}">

問題は、domainSpecificName属性が true に設定されているか、リクエストに含まれていないことです。

Websphere では、この行は次のようにコンパイルされます

_jspx_th_c_if_0.setTest(((java.lang.Boolean) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${requestScope.domainSpecificName}", boolean.class, (PageContext)pageContext, _jspx_fnmap, false)).booleanValue());

(クラスはbooleanであり、デフォルト値は であることに注意してくださいfalse。)

Jetty の JSP の同じ行は、次のようにコンパイルされます。

_jspx_th_c_if_0.setTest(((java.lang.Boolean) org.apache.jasper.runtime.PageContextImpl.evaluateExpression("${requestScope.domainSpecificName}", java.lang.Boolean.class, (PageContext)_jspx_page_context, null)).booleanValue());

ここには のクラスBooleanと のデフォルト値がありnull、属性が存在しない場合は明らかに NPE をスローします。

ドキュメントから、値をエラーとしてJexlBuilder.strict(false)扱わないように設定できるように思えます。null(ただし、それがどのようにコンパイルされるかはわかりません。)

Jetty 内で JexlBuilder を構成する方法を知っている人はいますか?

または、間違った道を進んでいる場合。誰かがこれを処理する正しい方法を知っていますか? NPE をスローする可能性のあるインスタンスは何百もある<c:if test="${...}">ため、少なくとも短期的にはすべてを修正することは現実的ではありません。

4

1 に答える 1