【问题标题】:Validation of java object using javascript使用 javascript 验证 java 对象
【发布时间】:2012-10-19 12:38:53
【问题描述】:

我的项目有以下任务: 我需要根据脚本中的规则验证 java 对象(例如 javascript)。

为什么在 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 对象发票(见第 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 吗?

什么都好!

问候, 戴夫

【问题讨论】:

  • 为什么需要javascript?为什么不用java来写规则??
  • 你能举个例子说明使用 Javascript 对be flexible and create rules as I want 有什么帮助吗?您给出的示例在 Java 中会更简单。
  • 您可以使用 Rhino 从 Java 执行 JavaScript。
  • @PeterLawrey 1) 因为我使用 Apache Wicket 作为 Web 应用程序框架,来构建表单等,2) 因为我需要声明性方法,所以大学的助手想要它。 .
  • 我仍然不明白为什么你不能在 Java 中动态地做这两件事。

标签: java javascript validation wicket


【解决方案1】:

以下是如何将 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 代码的健壮性。

【讨论】:

  • 我听说我也可以使用 Rhino。但有什么区别? Rhino 不是 java 脚本库的一部分吗?
【解决方案2】:

我用 Rhino 解决了这个问题!我可以在其中读取和操作我的 javascript 文件...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多