Openlaszlo调用JavaRPC和JAVA类通信

阅读更多
JavaRPC允许Laszlo客户端远程调用服务端的JAVA类和方法。在laszlo中使用标签来声明一个JavaRPC对象:


classname(String):    必需。指定需要访问的JAVA类名
attributename(String):使用服务端对象时的关键词。当scope为session或webapp时使用。
Scope(String):        必需。在session,webapp和none三个中选一个。
Loadoption(String):   loadcreate,loadonly和create三个中任选一个。Loadcreate:如果服务器上存在该对象时加载,如果不存在,则在加载前自动创建该对象。Loadonly:只负责加载对象,如果该对象不存在,则返回一个错误。Create:在加载对象时总是在服务器端创建该对象。默认为loadcreate。
Createargs(Array):    只有当loadoption为loadcreate或create时才有效。Createargs
数组包含一些变量,这些变量用来在服务端创建对象时使用。默认为null。
Objectreturntype(String):  pojo和javabean中任选一个。如果从服务端返回一个对象,使用pojo只返回该对象中所有声明为public的成员变量。使用javabean将返回含有getXXX()方法的成员变量。
Autoload(Boolean):    true或false。True:在初始化时自动加载指定的对象。False:需要在使用对象前调用load()方法。默认为true。
Secure(Boolean):   true或false。如果选择true的话,会在服务端和客户端之间建立一个安全的连接。
Secureport(Number):: 只有才secure为true时才有效。
如:
通过returnsun来建立javarpc和java之间的桥梁。其中name就是指定一个rpc的属性(attributename)。再通过remotecall调用java类的方法:

    
    
    

说明:在使用javarpc前,首先要将JAVA类定义为安全的,如下:

    
        ^com.sum.ReturnSum
    

funcname对应java类的方法名称。

如果调用的方法带有参数,remotecall需用来传递参数,这个参数对应JAVA方法中的形参。在传递时,remotecall会根据param的位置和JAVA方法形参的位置匹配。
,使用args来接收JAVA方法的返回值,无需定义数据类型。
下面通过一个小DEMO来演示一下使用JavaRPC和JAVA进行通信:
TypesExample类:
package examples;
import java.util.Vector;
import java.util.Hashtable;

public class TypesExample {

    public static String passInteger(int i) {
        return "got integer parameter: " + i;
    } 

    public static String passDouble(double d) {
        return "got double parameter: " + d;
    } 

    public static String passBoolean(boolean b) {
        return "got boolean parameter: " + b;
    } 

    public static String passClientArray(Vector v) {
        return "got vector parameter: " + v;
    } 

    public static String passClientObject(Hashtable t) {
        return "got hashtable parameter: " + t;
    }
}

LZX文件 demo.lzx

    
    
        
            ^examples.TypesExample
        
    
    
    
        
            
            canvas.buttons.setAttribute('visible', true);
        
        
            Debug.write('(types ondata) response is:', res);
        
        
            Debug.write('(types onerror) error:', errmsg);
        
        
        
            
        
        
        
            
        
        
        
            
        
        
        
            
                
                    return new LzRPC.DoubleWrapper(42.0);
                
            
        
    
    
        
        
        
    

你可能感兴趣的:(Java,XML,Web)