Service.getReportData();
如上例子说明了连接到J2EE Server和调用一个方法的过程。
为了处理实际的工作,必须在Flash客户端和J2EE Server上的企业资源之间相互传递参数。所有的远端调用都在异步方法中调用。为了支持从服务器上返回值,必须在Flash客户端添加回调函数。只要网关从J2EE服务器上的函数返回值该回调函数就被调用。为了支持函数回调,ActionScript函数的函数名必须与被调用的Java方法名一致。在如下的例子中,方法是getReportData(), 因此ActionScript回调函数应当命名为getReportData_result;
function getReportData_Result(result)
{
//Print the results from the app server to the
//debug window
trace(result);
}
所有的方法调用信息,包括参数和返回值,都在客户端和服务器端以Action Message Format(AMF)的格式传递。AMF是二进制信息格式,通过HTTP以一种类似于SOAP(Simple Object Access Protocol)的方式传送。在网络中,AMF信息比SOAP信息要小得多,因而允许函数以更快的速度被调用。Flash Remoting透明地处理Java对象和ActionScript对象之间的所有映射。
使得Flash成为J2EE前端的一个重要的特性是它的内嵌的XML解析功能。Flash生来就能够在全部在客户机上处理XML解析和DOM(document.nbspObject Model)传递。如下的ActionScript代码解析一篇应用于2D图形中的包含x和y坐标的XML文档:
<graph>
<point>
<xvalue>10</xvalue>
<yvalue>5</yvalue>
<point>
<point>
<xvalue>20</xvalue>
<yvalue>10</yvalue>
<point>
</graph>
用Flash远程调用增强J2EE表示层(4)
时间:2010-12-10
应用服务器上的一个产生图形文件文档的类:
public class FlashDemo
{
public FlashDemo()
{
}
public document.nbspgetReportData()
{
document.nbspdoc =null;
try
{
System.out.println("calling getReportData");
document.uilder builder =
document.uilderFactory.newInstance().newdocument.uilder();
doc= builder.newdocument.);
//Create a record as the root element
Element element = doc.createElement("graph");
Element child1=doc.createElement("point");
child1.setAttribute("xvalue", "February");
child1.setAttribute("yvalue", "20");
element.insertBefore(child1, null);
doc.appendChild(element);
这个简单的类将返回一个文档对象给Flash客户端解析; 下面的例子完成解析:
//Parse the XML document.nbspreturned by the server,
//keeping the results in an array called nodes
function parseXML()
{
//Create a new array called nodes
nodes = new Array();
//Initialize the nodes array to
//contain all of the children of the reportXML document.BR> nodes = reportXML.nodes;
// childCounter is used as a counter for the child Nodes
childCounter = 0;
//childNodes will contain the children of each node
childNodes = new Array();
//XAxisvalue will contain the x-axis value to plot
xAxisvalue = new Array();
//YAxisvalue will contain the y-axis value of the data sets
yAxisvalue = new Array();
//Iterate through the first level children of the XML Doc
for (j=0; j<=nodes.length; j++)
{
//Check if the node Name is report i.e., the data set
//belongs to graph
if (nodes[j].nodeName == "graph")
{
//Get the background color of the graph
b
|