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 规则文件(参见第 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有没有getter或setter?

任何事情都会很好!

问候,戴夫

4

2 回答 2

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 回答
0

我用犀牛解决了它!我可以在其中读取和操作我的 javascript 文件...

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

于 2012-11-04T01:05:27.907 回答