2

javaとjavascriptの組み合わせについて質問があります。このアプリケーションでは、JavaScriptでGUIをビルドし、Javaでサーバー側をビルドします。javascriptでは、javaのclassYからmethodXを呼び出したいと記述しています。問題は、javaがjavascriptについて何も知らないため、javaで何かを変更すると、javascriptコードが破損する可能性があることです。Eclipseの単純なリファクタリングオプションでさえ、知らないうちにjavascriptを壊す可能性があります(メソッド名の変更、パラメーターの削除、DTOオブジェクトのsetterとgetterの名前の変更)。問題は、それに対抗する方法です。私はJavaでいくつかのアノテーションを書くことを考えていたので、メソッドのシグネチャを変更した後、コンパイルエラーが発生します(この種のアノテーションを書くことさえ可能ですか)が、ある種のツールがある場合は、車輪の再発明をやり直したくありません私のためにそれをします。

4

2 に答える 2

0

問題は、それに対抗する方法です。

おそらく最も実用的な解決策は、Javascriptから呼び出されるJava APIがある場合(またはその逆)のすべてを「実行」するように特別に設計された一連の自動テスト(ユニットテストやシステムテストなど)を開発することです。

于 2013-02-21T07:50:56.497 に答える
0

あなたの問題にはいくつかの解決策(回避策)があると思います。

1)メソッドを使用して特定の文字列をマッピングします。

public class JavascriptCallable {

private static final String jsIdentifierMethod1 = "method1";

private static final String jsIdentifierMethod2 = "method2";


/**
 * All requests from JS should be redirected to this method.
 * 
 * @param methodName Name of the method
 */
public void requestFromJavascript (String methodName) throws Exception {

    if (methodName.equals(jsIdentifierMethod1)){
        method1();
    } else if (methodName.equals(jsIdentifierMethod2)){
        method2();
    } else{
        throw new Exception("Method not supported");
    }

}

public void method1(){
    // Do something
}

public void method2() {
    // Do something
}

}

2)js呼び出しに適格な個別のメソッドを持つ。これは、リフレクションを使用してメソッドを呼び出す場合に役立ちます

public class JavascriptCallable {

/*----------------Methods to be called by js. Never refractor------------------*/

public void noRefractorMethod1() {
    method1();
}

public void noRefractorMethod2() {
    method2();
}

/*-------------------------------------------------------------------------------*/

/*---------Methods with business logic. Refractoring these will not mess your js-----------*/

public void method1() {
    // Business logic
}

public void method2() {
    // Business logic
}

/*-------------------------------------------------------------------------------*/

}

これが役に立ったら教えてください。

于 2013-02-23T19:14:59.683 に答える