2012-10-19 26 views
0

我對我的項目有以下任務: 我需要根據腳本(例如javascript)中的規則驗證java對象。使用javascript驗證java對象

爲什麼在JavaScript? 因爲在JavaScript我可以靈活,因爲我想創建規則(例如驗證像驗證字段的組合(含稅,收件人))

現在,這裏是我:

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有一個驗證方法,它具有Javascript規則文件(參見Point 1)和Java Object,Invoice(參見Point 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對象?有沒有getter或setter的JavaScript?

任何事情都會很好!

問候, 戴夫

+1

爲什麼需要JavaScript的?爲什麼不用java寫規則? – zaffargachal

+0

你可以舉一個例子,說明如何使用Javascript幫助「靈活並創建規則,如我所願」?你給的例子在Java中會更簡單。 –

+1

您可以使用Rhino從Java執行JavaScript。 – Bergi

回答

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(); 
    } 
} 

在這種情況下,控制器Java類暴露了一些公共的方法JavaScript以使用解釋的靈活性代碼與編譯的Java代碼的健壯性相結合。

+0

我聽說我也可以使用犀牛。但有什麼區別? Rhino不是Java腳本庫的一部分嗎? –