4

うわー、タイトルはかなり口いっぱいです。説明させてください。ページが.jspあります。このページには JavaScript<script ..>要素があり、JavaScript 内には EL 式 ( ${..}) があります。コードは次のようになります。

<script type="text/javascript">
  jQuery(document).ready(function() {
    var HOST_ID = ${host.id};
    ...
  });
</script>

問題:
Eclipse JavaScript フォーマッターは、デフォルト${host.id}で複数行に展開されます。EL式が何らかの形でJavaScriptオブジェクトとして解釈されていると推測しています。とにかく、タグは次のようになります。

var HOST_ID = $
{
  host.id
}
;

=>これは実際にコードを壊します!

複数の行に分割されている場合、タグは有効な EL 式として認識されなくなり、JavaScript コードの実行は例外のスローを停止します。

// @formatter:offタグ (または)を使用して Java フォーマッタで書式設定アドホックをオフにする方法については知っていonますが、Eclipse の JavaScript フォーマッタにはそのようなオプションはありません。


これを修正する (回避策を読む) 唯一の方法は、JavaScript フォーマッターがオブジェクトを展開しないようにすることです。しかし、これには次の 2 つの点で問題があります。

  • オブジェクトを展開しないと、非常に煩雑になり、非常に判読不能なコードになる可能性があります。
  • 複数行にわたるオブジェクトの展開は、Eclipse JavaScript フォーマッターのデフォルトです。

これは、私のチームのメンバーが.jsp記述された構造を含むファイルを誤って自動フォーマットすると、コードが黙って壊れることを意味します。それでも有効な JS のように見え、ビルドなどに合格しますが、実行時には機能しません。


誰にもこれに対する解決策はありますか?最善の解決策は、Java フォーマッターで使用されているようなタグを使用して書式設定を何らかの方法で無効にすることです (この解決策は、会社/チーム全体のフォーマッター標準を強制したり、Shift + Ctrl + F を誤って押してしまうことを期待しなくても機能します)。

4

2 に答える 2

2

私がこれを書いている時点で受け入れられている解決策は、問題の解決策として EL 式を一重引用符で囲むことを提案しています。これを行うことに決め、EL 式の値がブール値である場合は、値が Javascript の文字列になり、条件付き比較が期待どおりに機能しない可能性があるため、十分に注意してください...

ブール変数 host.isActive があり、値が true であるとします。

var HOST_IS_ACTIVE1 = ${host.isActive}; // var type is boolean in Javascript

if (HOST_IS_ACTIVE1 == true) {
  // this code will be executed
}

if (HOST_IS_ACTIVE1 == 'true') {
  // this code will not be executed
}

var HOST_IS_ACTIVE2 = '${host.isActive}'; // var type is string in Javascript

if (HOST_IS_ACTIVE2 == true) {
  // this code will NOT be executed
}

if (HOST_IS_ACTIVE2 == 'true') {
  // this code will be executed
}
于 2014-07-30T15:53:42.860 に答える
0

どうやら、EL式を一重引用符で囲むことは可能です。これにより、JavaScriptでは文字列のように見えますが、EL式として評価されます。

だから変化する

var HOST_ID = ${host.id};

var HOST_ID = '${host.id}';

実際にトリックを行います。Eclipse JavaScriptフォーマッターは、式を文字列と見なし、展開しません。問題が解決しました。

于 2012-11-29T09:17:45.980 に答える