我有一个关于将 java 与 javascript 结合起来的问题。在我们的应用程序中,我们在 javascript 中构建了 gui,在 java 中构建了服务器端。在 javascript 中,我们写道,我们想从 java 中的 classY 调用 methodX。问题是java对javascript一无所知,所以当我们在java中改变一些东西时,我们可能会破坏javascript代码。即使是 Eclipse 中的简单重构选项也可以在不知情的情况下破坏我们的 javascript(更改方法名称、删除参数、重命名 DTO 对象中的 setter 和 getter)。问题是如何对抗它。我正在考虑在java中编写一些注释,所以在更改方法签名后你会得到编译错误(甚至可以写这种注释)但是如果有某种工具,我不想再次重新发明轮子会为我做的。
问问题
153 次
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 回答