在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 代码
- <structure name="SendMail>
- <field label="邮件服务器地址" name="host"/>
- <field label="用户名" name="userName"/>
- <field label="密码" name="password"/>
- <field label="发件人" name="from"/>
- <field label="发件人姓名" name="fromName"/>
- <field default="success" label="何时发送" inputtype="select" name="when">
- <value value="init" label="init" name="init"/>
- <value value="success" label="success" name="success"/>
- <value value="exception" label="exception" name="exception"/>
- field>
- <field label="收件人" name="to"/>
- <field label="收件人姓名" name="toName"/>
- <field colspan="2" label="主题" size="60" name="subject"/>
- <field type="cdata" colspan="2" label="信息" inputtype="textarea" name="message"/>
- structure>
sendMail方法代码
java 代码
- import org.apache.commons.mail.MultiPartEmail;
-
- MultiPartEmail mail = new MultiPartEmail();
- mail.setHostName(self.host);
- mail.setAuthentication(self.userName, self.password);
-
- mail.setFrom(self.from, "");
- mail.setSubject(self.subject);
- mail.setMsg(self.message);
- mail.addTo(self.to, self.toName);
-
- mail.send();
这是一段groovy代码,self.host相当于在JavaClass里this.host。
init方法代码
java 代码
- if(self.when == "init"){
- self.exec("sendMail", binding);
- }
其他方法和init方法代码类似,省略。
实现对SendMail脚本(函数)的调用
在XWorker中创建并编辑一个脚本数据对象,以下是它的xml代码片段
xml 代码
- <script label="send" description="调用SendMail上下文发送电子邮件。" name="send">
- <contexts>
- <context name="mailContext" password="111" userName="111" from="11" to="11" host="smtp.tom.com"/>
- contexts>
- script>
以上就是脚本的基本概况,这里邮件服务器、邮件信息等参数都是定好的(在web程序里演示动态的)。
在Java类中调用以上脚本发送电子邮件:
java 代码
- import com.xworker.DataCenter;
-
- public class TestSendMail {
- public static void main(String args[]){
-
- DataCenter.getInstance().setPath("webroot/WEB-INF/data");
- DataCenter dataCenter = DataCenter.getInstance();
-
-
- dataCenter.runScript("example:config:context.SendMail:/@send");
- }
- }
执行这个JavaApplication就可以发送电子邮件了。
Web应用下实现对发送邮件的脚本(函数)的使用
在Web下使用发送邮件的脚本的原理是一样的,也是通过上下文的方式调用的(还有其他方式调用)。在Web这里我们编写两个Web页面,一个是编辑电子邮件信息的页面,一个是发送并显示结果的页面。
下面是编辑电子邮件信息的页面的数据象xml形式的概况(包括control,result和界面的定义)
xml 代码
- <webAction description="编辑电子邮件。" name="editMail">
- <result value="example:config:context.SendMailFromWeb:/@editMail/@view" name="success"/>
- <forms title="编辑电子邮件" name="view">
- <form action="do?sc=example:config:context.SendMailFromWeb:/@sendMail" target="_self" name="editForm">
- <group cols="1" title="布局容器" haveLabel="false" showTitle="false" haveTitle="false" name="layout">
- <structureEditBody isNestedInGroup="false" label="编辑邮件信息" name="mail">
- <structure label="电子邮件" name="mail" >
- <field colspan="2" label="发件人" description="请输入发件人的邮件地址。" size="60" name="from"/>
- <field colspan="2" label="收件人" size="60" name="to"/>
- <field colspan="2" label="主题" description="邮件的主题。" size="60" name="subject"/>
- <field colspan="2" label="内容" description="
邮件的内容。
"/>
- structure>
- structureEditBody>
- <cell colspan="2" label="cellButton" align="center" showTitle="false" name="cellButton">
- <button value="发送" type="submit" label="sendButton" name="sendButton"/>
- cell>
- group>
- form>
- forms>
- webAction>
-
下面是发送邮件并显示结果的Web页面的xml的概况(包括WebControl定义,脚本定义和result处理)
xml 代码
- <webAction description="发送电子邮件。" name="sendMail">
- <result value="core:config:forms.messageAndReturnBack" name="success"/>
- <scriptFlow script="
- mail = requestBean.getObject("mail", true);
-
- message = "发送邮件成功!";
- return "sendMail";
- " name="script">
- <scriptFlow script="return "success";" name="sendMail">
- <contexts>
- <context name="mail" from="$_{mail.from}" id="mail" to="$_{mail.to}"
- label="mail" host="host" .../>
- contexts>
- scriptFlow>
- scriptFlow>
- 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文档。
分享到:
相关推荐
AutoJs源码-脚本更新示例。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!...
基本的脚本函数,sh脚本库.sh累加数组中的值.sh默认退出状态码,sh全局变量.sh 使用return命令.sh使用函数输出.sh 使用局部变量.sh 使用库函数,sh使用命令行中传递的参数.sh使用全局变量带来的问题.sh想函数传数组数据...
Linux运维-运维系统服务04-Shell脚本d6-Shell函数与正则表达式-10函数中return作用1.mp4
1. 详细的标准函数介绍,涵盖了所有WINCC-C脚本的标准函数。 2. 丰富的编程示例,涵盖了从基本的报警控件操作到复杂的脚本编程的所有方面。 3. 实用的脚本编程技巧和经验分享,帮助开发人员快速掌握WINCC-C脚本的...
Linux运维-运维系统服务04-Shell脚本d6-Shell函数与正则表达式-06case脚本中菜单打
Linux运维-运维系统服务04-Shell脚本d6-Shell函数与正则表达式-17综合案例实现3.mp4
5. **示例代码**:压缩包中的`mlffit1demo.m`, `mlffit2demo.m`可能是两个不同的拟合示例,通过运行这些脚本,可以展示如何应用Mittag-Leffler函数进行数据拟合。 6. **代码实现**:`mlffit1.m`和`mlffit2.m`可能...
Linux运维-运维系统服务04-Shell脚本d6-Shell函数与正则表达式-02实战案例3统计web
观数台-脚本语法和图表函数指南 本资源摘要信息为观数台-脚本语法和图表函数指南,涵盖了观数台脚本语法、图表函数、数据分析和可视化等方面的知识点。 脚本语法 1. 脚本语法简介:Backus-Naur 形式,EBNF 语法,...
Linux运维-运维系统服务04-Shell脚本d6-Shell函数与正则表达式-07case应用案例1.mp4
Linux运维-运维系统服务04-Shell脚本d6-Shell函数与正则表达式-13综合案例需求说明.mp4
JavaScript应用实例-脚本管理工具UI示例.js
Linux运维-运维系统服务04-Shell脚本d6-Shell函数与正则表达式-04case语句基本语法结构
计算峰均比(PAPR)的matlab脚本 可直接调用!
[MATLAB]2-脚本文件、函数及数组.ppt
AutoIt3_脚本函数用法中文说明 在看这本小小的电子书之前,也许您也和当初的我一样,不知道 Au3 是何种东西,也 许您只是有听说过,却一直没有时间来试一试。 结识 Au3 完全是一个偶然,在去年夏天的时候,偶然在...
wincc脚本数据手册,最全的C脚本,介绍详细,官方资料
MySql建表脚本语句--商店示例
3. **函数调用**:介绍如何定义和调用自定义函数,以及WinCC内置的系统函数,如时间函数、数学函数等。 4. **WinCC对象操作**:讲解如何通过C脚本来创建、读取、修改和删除WinCC中的各种对象,如变量、画面、报警、...