深入系列之服务器端支持下
发布时间:2021-09-06 10:11:43
范例2:使用Web Services将对象序列化成XML并使用客户端XSLTView空间输出信息
使用了与上例相同的Employee和Company两个类,在这里就不重复了,先来看一下Web Service方法GetXmlSerializedCompany的代码:
GetXmlSerializedCompany方法代码:
1 [WebService(Namespace = \"\")]
2 [WebServiceBinding(ConformsTo = sicProfile1_1)]
3 public class ComplexTypeWS : bService {
4
5 [WebMethod]
6 [WebOperation(false, l)]
7 public Company GetXmlSerializedCompany(Company company)
8 {
9 return company;
10 }
11 }
这个方法简单地令人惊讶,只是直接将参数返回。其精妙之处就是使用了bOperationAttribute进行标记,表明了该方法将以XML形式输出。
接下来是HTML,与上例非常的相似,就不多作解释了。代码如下:
HTML代码:
1 <atlas:ScriptManager ID=\"ScriptManager1\" runat=\"server\" />
2
3 <form id=\"form1\" runat=\"server\">
4
5 <div>Employees:</div>
6 <div id=\"employees\"></div>
7 <hr />
8 <div>Add Employee:</div>
9 <div>Name: <input type=\"text\" id=\"empName\" /></div>
10 <div>Age: <input type=\"text\" id=\"empAge\" /></div>
11 <input type=\"button\" value=\"Add employee\" onclick=\"addEmployee()\" /><br />
12 <hr />
也有这方面原因。”王峰分析。[1][2][3]下一页成“面子工程” 13 <div>Company Name:<input type=\"text\" id=\"companyName\" /></div>
14 <input type=\"button\" value=\"Serialize!\" onclick=\"serialize()\" /><br />
15 <hr />
16 <div id=\"xmlDisplay\"></div>
17
18 </form>
然后准备一下Atlas Xml Script,声明一个XmlDataSource,用来获得XSLT文件。再添加一个XSLTView,将其transform属性与XmlDataSource的document属性绑定起来。代码如下:
Atlas Xml Script代码:
1 <script type=\"text/xml-script\">
2 <page>
3 <components>
4 <xmlDataSource id=\"xsltSource\" autoLoad=\"true\" serviceURL=\"l\" />
5 <xsltView id=\"xmlDisplay\">
6 <bindings>
7 <binding property=\"transform\" dataContext=\"xsltSource\" dataPath=\"document\" />
8 </bindings>
9 </xsltView>
10 </components>
11 </page>
12 </script>
顺便给出l文件代码:
l:
1 <?xml version=\"1.0\" encoding=\"utf-8\"?>
2 <xsl:stylesheet version=\"1.0\" xmlns:xsl=\"\">
3 <xsl:template match=\"/Company\">
4 <div>
5 Company:
6 <xsl:value-of select=\"Name\" />
7 </div>
8 <xsl:for-each select=\"Employees/Employee\">
9 <div>
10 <xsl:value-of select=\"Name\" />
11 <xsl:text>, </xsl:text>
12 <xsl:value-of select=\"Age\" />
13 <xsl:text> years old.</xsl:text>
14 </div>
15 </xsl:for-each>
16 </xsl:template>
17 </xsl:stylesheet>
然后是Javascript代码,大部分与上例相同,只作了少量注释:
Javascript代码:
1 <script language=\"javascript\">
2 var empArray = new Array();
3
4 function addEmployee()
5 {
6 var emp = new Object();
7 = $(\'empName\').value;
8 e = parseInt($(\"empAge\").value, 10);
9
10 sh(emp);
11 updateSource();
12 }
13
14 function updateSource()
15 {
16 var html = \"\";
17
18 for (var i = 0; i < ngth; i++)
19 {
20 var emp = empArray[i];
21 html += ((i + 1) + \". \" + + \", \" + e + \" years old.<br />\")
22 }
23
24 $(\"employees\").innerHTML = html;
25 }
26
27 function serialize()
28 {
29 // 构造一个Company对象作为参数,
30 // 结构和服务器端对象相同。
31 var company = new Object();
32 = $(\"companyName\").value;
33 ployees = empArray;
34
35 var params = { \"company\" : company }
36 var method = new rviceMethod(\"mx\", \"GetXmlSerializedCompany\", null);
37
38 voke(params, onMethodComplete);
39 }
40
41 function onMethodComplete(resultXml, response, userContext)
42 {
43 // 这时第一个参数是一个Xml,
44 // 用它来设置XSLTView的document属性。
45 $(\"xmlDisplay\").t_document(resultXml);
46
47 ngth = 0;
48 updateSource();
49 }
50 </script>
代码就是这些,接下来看一下使用。首先依旧是添加数个Employee:
填写Company Name并点击“Serialize!”按钮,可以看到下方的XSLT输出:
使用Fiddler查看的Request Body和Response Body的信息:
正如我们所期望的那样,Response Body里的信息是Company对象被Xml序列化之后的结果,然后使用XSLT转换后即得到了我们需要的信息!
通过了上面两个例子,我们可以看出Atlas对于Web Services的支持是非常灵活的。具体的使用方式让开发人员有很大的发挥空间,开发人员完全可以选择合适的方式把Atlas灵活运用在自己的项目中。
当然,Atlas对于Web Services的支持还远不止这些,在以后的文章里我会继续从实现角度对Atlas的Web Services进行分析,并提供更多的范例给大家参考。希望大家支持我的“深入Atlas系列”,谢谢大家。查看本文来源
经常疲乏无力是什么原因昆明试管婴儿
合肥哪家医院治男科好
- 上一页:深入系列之服务器端支持的
- 下一页:深入源码研究窗体的创建物业