問題タブ [jexl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jsp - Jexlで厳密でない評価モードを使用するようにJettyを設定するには?
主に JSP で構築された Web サイトを Websphere から Jetty に移動しようとしています。属性NullPointerException
の EL コードの評価に問題があります。test
問題は、domainSpecificName
属性が true に設定されているか、リクエストに含まれていないことです。
Websphere では、この行は次のようにコンパイルされます
(クラスはboolean
であり、デフォルト値は であることに注意してくださいfalse
。)
Jetty の JSP の同じ行は、次のようにコンパイルされます。
ここには のクラスBoolean
と のデフォルト値がありnull
、属性が存在しない場合は明らかに NPE をスローします。
ドキュメントから、値をエラーとしてJexlBuilder.strict(false)
扱わないように設定できるように思えます。null
(ただし、それがどのようにコンパイルされるかはわかりません。)
Jetty 内で JexlBuilder を構成する方法を知っている人はいますか?
または、間違った道を進んでいる場合。誰かがこれを処理する正しい方法を知っていますか? NPE をスローする可能性のあるインスタンスは何百もある<c:if test="${...}">
ため、少なくとも短期的にはすべてを修正することは現実的ではありません。
functional-programming - Java互換の簡易式言語
エンドユーザー API がオブジェクト/イベントのリストで集計を受け取る機能エンジニアリング用のシステムを Scala で構築しています。たとえば、このツールのクライアントは、特定の Web ユーザーの過去のページビューの配列を指定して、特定の国からのページ ビューをフィルター処理してカウントする関数をツールに渡すことができます。この呼び出しの出力は数値になります。
これは非常に単純な縮小操作と考えることができます。そのようなシステムの API を構築する方法を考えています。カウントとフィルターを実行する単純なカスタム言語を作成することもできますが、注意して設計しない限り、特に十分な表現力が得られないため、最善の方法ではないことは確かです。
私が最初から作成しなくても、単純な関数を表現するために使用できる式言語のようなものを知っていますか? もう 1 つのオプションは、エンド ユーザーがカスタム コードをこのライブラリに渡すことを許可することですが、これは実行時に危険な場合があります。
SQLをさまざまなデータ構造とデータベースにプラグインするapache Calciteを認識しています。これは良いオプションですが、「列」SQL の方法で考える必要がありますが、ここでは、プログラミングの map-reduce 方法に似た行ベースの何かを探しています。
java - JEXL: プロパティ アクセサーをカスタマイズする方法
「簡略化されたマップ」と考えることができるデータ オブジェクトがあります。get(String)
、 、などの方法がありますがput(String,Object)
、基本的にはそれだけです。
ここで、JEXL を使用して、データ オブジェクトの複雑な式を評価したいと考えています。カスタム JexlContext を作成することでこれを行うことができ、それは"foo"やfoo != null
. ただし、 「foo.bar」のような式を使用しようとするとすぐに、「解決できないプロパティ」というエラー メッセージで Jexl が失敗します。明らかに、Jexl はカスタム JexlContext を使用して"foo"を評価しますが、foo オブジェクトで"bar"を評価することはできません。私の印象は、カスタム PropertyResolver を使用する必要があるということです。私はそれを実装できますが、わかりません。JexlUberspect にはsetResolvers
、 またはのようなメソッドが含まれていないため、それをゲームに取り込む方法addResolver
。