0

私のプロジェクトには次のタスクがあります。スクリプト(javascript など)のルールに基づいて Java オブジェクトを検証する必要があります。

なぜJavaScriptで?javascript では柔軟にルールを作成できるため (たとえば、validate(tax,recipient) のようなフィールドの組み合わせを検証するなど)

今ここに私が持っているものがあります:

1) JavaScript ファイル Rules.js で定義された検証ルールがあります。

function checkPrice(price){
  if(price < 0){
    return false;
  }
}

2) プレーンな Java オブジェクト (請求書) があります。そして、それは平凡なままでなければなりません!

public class Invoice implements Serializable {

  private String details;
  private String tax;
  private String recipient;
  private double price;

  //getter and setter
}

3) そして、ValidatorObject があります。これは、Java または JavaScript オブジェクトにすることができます。あなたの提案次第です。

この ValidatorObject にはメソッド validate があり、Javascript Rules File (ポイント 1 を参照) と Java オブジェクト Invoice (ポイント 2 を参照) をパラメーターとして持ちます。

validate(Rules.js, Invoice i){

  //here it must take the Rules.js and use the rules inside to validate the Invoice i 

}

私の質問は次のとおりです。javascript ファイルで定義されたルールに基づいて Java オブジェクトを検証するために使用できるフレームワークはありますか? または、チュートリアル、ビデオ、または提案はありますか?

または、javascript ファイルを Java オブジェクトに読み込むにはどうすればよいですか? javascriptのゲッターまたはセッターはありますか?

なんでもいいです!

よろしく、デイブ

4

2 に答える 2

0

Rhinoで解決しました!JavaScriptファイルを読み取って操作できる場所...

https://developer.mozilla.org/en-US/docs/Rhino

于 2012-11-04T01:05:27.907 に答える
0

ScripEngine を Java アプリケーションに埋め込む方法は次のとおりです。

import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;



public static void main( String[] args )
   throws
      ScriptException, IOException
{
   final String run;
   if( args.length > 0 )
   {
      run = args[0];
      if( run.contains( "=" ))
      {
         usage();
      }
   }
   else
   {
      run = "run.js";
   }
   File script = new File( run );
   if( script.canRead())
   {
      ScriptEngine engine = new ScriptEngineManager().getEngineByMimeType( "text/javascript" );
      Bindings bindings = engine.getBindings( ScriptContext.GLOBAL_SCOPE );
      bindings.put( "controller", new Controller());
      for( int i = 1; i < args.length; ++i )
      {
         String[] varVal = args[i].split( "=" );
         if( varVal.length == 2 )
         {
            bindings.put( varVal[0], varVal[1] );
         }
         else
         {
            usage();
         }
      }
      info( "Loading and executing: " + script );
      engine.put( ScriptEngine.FILENAME, script.toString());
      engine.eval( new FileReader( script ));
   }
   else
   {
      System.err.println( "Can't read automation script file: " + script );
      usage();
   }
}

この場合、Controller Java クラスはいくつかのパブリック メソッドを JavaScript に公開して、解釈されたコードの柔軟性とコンパイル済み Java コードの堅牢性を組み合わせて使用​​します。

于 2012-10-19T12:46:07.607 に答える