当前位置: 首页 > 工具软件 > XWorker > 使用案例 >

XWorker介绍(3)-脚本(函数)示例

裴钧
2023-12-01

在XWorker介绍(3)中讲以实现一个发送邮件的功能组件,并演示如何在Java Application和WebApplication中调用这个功能。

其实了解XWorker的最好方法是直接在XWorker中操作一下,大家可以从附件中下载example项目更新一下,实际看看we架构和脚本例子的数据对象。脚本的功能演示写成了文档,所以在帖子中我就挑重要的说明一下。

提示:

  • 数据对象+它的方法等于Java Class的效果
  • 不要把XWorker理解成一个web应用,XWorker也可以当组件在Java类中使用
  • 通过Context可以实现函数的可视化调用,这会大大降低对程序语言的掌握难度要求

要演示的功能说明

在这个演示中我们编写一个发送邮件的脚本(函数),然后演示其他脚本如何调用这个脚本(函数),并最终实现在Java的一般应用和Web应用中的使用发送邮件的脚本(函数)。

一下部分只贴代码部分,具体过程参看文档。

邮件发送脚本的实现

首在这里我们会定义一个SendMail结构数据对象,会定义邮件服务器地址、用户名、密码、发件人、收件人....等属性,会添加sendMail、inherit、success、exception和init五个方法,当把属性和五个方法定义完时邮件发送的脚本(函数)就实现了。

下面贴出其代码片段:

SendMail结构数据对象的xml代码片段

xml 代码
  1. <structure name="SendMail>  
  2.     <field label="邮件服务器地址" name="host"/>  
  3.     <field label="用户名" name="userName"/>  
  4.     <field label="密码" name="password"/>  
  5.     <field label="发件人" name="from"/>  
  6.     <field label="发件人姓名" name="fromName"/>  
  7.     <field default="success" label="何时发送" inputtype="select" name="when">  
  8.         <value value="init" label="init" name="init"/>  
  9.         <value value="success" label="success" name="success"/>  
  10.         <value value="exception" label="exception" name="exception"/>  
  11.     field>  
  12.     <field label="收件人" name="to"/>  
  13.     <field label="收件人姓名" name="toName"/>  
  14.     <field colspan="2" label="主题" size="60" name="subject"/>  
  15.     <field type="cdata" colspan="2" label="信息" inputtype="textarea" name="message"/>  
  16. structure>  

sendMail方法代码

java 代码
  1. import org.apache.commons.mail.MultiPartEmail;   
  2.   
  3. MultiPartEmail mail = new MultiPartEmail();   
  4. mail.setHostName(self.host);   
  5. mail.setAuthentication(self.userName, self.password);   
  6.   
  7. mail.setFrom(self.from, "");   
  8. mail.setSubject(self.subject);   
  9. mail.setMsg(self.message);   
  10. mail.addTo(self.to, self.toName);   
  11.   
  12. mail.send();  

这是一段groovy代码,self.host相当于在JavaClass里this.host。

init方法代码

java 代码
  1. if(self.when == "init"){   
  2.     self.exec("sendMail", binding);   
  3. }  

其他方法和init方法代码类似,省略。

实现对SendMail脚本(函数)的调用

在XWorker中创建并编辑一个脚本数据对象,以下是它的xml代码片段

xml 代码
  1. <script label="send" description="调用SendMail上下文发送电子邮件。" name="send">  
  2.     <contexts>  
  3.         <context name="mailContext" password="111" userName="111" from="11" to="11" host="smtp.tom.com"/>  
  4.     contexts>  
  5. script>  

以上就是脚本的基本概况,这里邮件服务器、邮件信息等参数都是定好的(在web程序里演示动态的)。

在Java类中调用以上脚本发送电子邮件:

java 代码
  1. import com.xworker.DataCenter;   
  2.   
  3. public class TestSendMail {   
  4.     public static void main(String args[]){   
  5.         //初始化数据中心,数据中心一般只初始化一次,指定好数据对象的存放目录   
  6.         DataCenter.getInstance().setPath("webroot/WEB-INF/data");          
  7.         DataCenter dataCenter = DataCenter.getInstance();   
  8.            
  9.         //执行发送邮件的脚本   
  10.         dataCenter.runScript("example:config:context.SendMail:/@send");   
  11.     }   
  12. }  

执行这个JavaApplication就可以发送电子邮件了。

Web应用下实现对发送邮件的脚本(函数)的使用

在Web下使用发送邮件的脚本的原理是一样的,也是通过上下文的方式调用的(还有其他方式调用)。在Web这里我们编写两个Web页面,一个是编辑电子邮件信息的页面,一个是发送并显示结果的页面。

下面是编辑电子邮件信息的页面的数据象xml形式的概况(包括control,result和界面的定义)

xml 代码
  1. <webAction description="编辑电子邮件。" name="editMail">  
  2.     <result value="example:config:context.SendMailFromWeb:/@editMail/@view" name="success"/>  
  3.     <forms title="编辑电子邮件" name="view">  
  4.         <form action="do?sc=example:config:context.SendMailFromWeb:/@sendMail" target="_self" name="editForm">  
  5.             <group cols="1" title="布局容器" haveLabel="false" showTitle="false" haveTitle="false" name="layout">  
  6.                 <structureEditBody isNestedInGroup="false" label="编辑邮件信息" name="mail">  
  7.                     <structure label="电子邮件" name="mail" >  
  8.                         <field colspan="2" label="发件人" description="请输入发件人的邮件地址。" size="60" name="from"/>  
  9.                         <field colspan="2" label="收件人" size="60" name="to"/>  
  10.                         <field colspan="2" label="主题" description="邮件的主题。" size="60" name="subject"/>  
  11.                         <field colspan="2" label="内容" description="

    邮件的内容。

    "/>  
  12.                     structure>  
  13.                 structureEditBody>  
  14.                 <cell colspan="2" label="cellButton" align="center" showTitle="false" name="cellButton">  
  15.                     <button value="发送" type="submit" label="sendButton" name="sendButton"/>  
  16.                 cell>  
  17.             group>  
  18.         form>  
  19.     forms>  
  20. webAction>  
  21.   

下面是发送邮件并显示结果的Web页面的xml的概况(包括WebControl定义,脚本定义和result处理)

xml 代码
  1. <webAction description="发送电子邮件。" name="sendMail">  
  2.     <result value="core:config:forms.messageAndReturnBack" name="success"/>  
  3.     <scriptFlow script="   
  4.     mail = requestBean.getObject("mail", true);   
  5.   
  6.     message = "发送邮件成功!";   
  7.     return "sendMail";   
  8.     " name="script">  
  9.         <scriptFlow script="return "success";" name="sendMail">  
  10.             <contexts>  
  11.                 <context name="mail" from="$_{mail.from}" id="mail" to="$_{mail.to}"    
  12.                 label="mail" host="host" .../>  
  13.             contexts>  
  14.         scriptFlow>  
  15.     scriptFlow>  
  16. webAction>  

以上代码中mail=requestBean.getObject("mail", true)是把界面提交的数据放入一个Map中。return "sendMail"是要执行脚本的子流程的sendMail脚本。在子流程中发送邮件的上下文中$_{}是要修改的变量,mail=reqeustBean.getObject("mail",true)就是为这些变量做了初始化。($_{}和${}的效果一样,可恶freemarker和groovy都用了,我在用就会冲突)

后记

希望大家能从演示中看出点什么来,毕竟了解新的东西需要有个过程。

附件example.rar是最新的example项目插件,里面包含了web框架演示和脚本演示的数据对象,解压后替换原来的即可,如果在使用中发现了什么bug请告诉我,XWorker还没有达到稳定的阶段。

ScriptExample.rar里包含了脚本功能演示的pdf文档。

 类似资料: