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