接口IWebAction是easyjweb的controller,用户可以通过重载execute方法实现所需功能。
public interface IWebAction { /** * Action执行接口,在EasyJWeb中,所有的请求都会调用该方法,执行相关的数据操作。 * * @param form 封装了本次请求的Form数据信息 * @param module 本次调用的Module信息 * @return 显示数据的模板或直接跳转的URL * @throws Exception */ public Page execute(WebForm form, Module module) throws Exception; }
用户可以直接实现IWebAction接口,然后实现execute方法,也可以继承IWebAction的实现类,更为方便。
IWebAction接口的实现类分布com.easyjf.web.core,com.easyjf.web,com.easyjf.web.tools,com.easyjf.web.ajax中,下面简单介绍几个Action:
1、AbstractCmdAction implements IWebAction
该类对Action命令进行封装的抽象类,用于为提供命令式WebAction的写法用户直接调用,可以减少书写繁锁的if语句,cmd命令del对应类中doDel或del方法。下面简要介绍类中方法:
①doBefore(),如果doBefore方法返回Page对象,则直接返回
②从form中获得命令(默认为init),查找doXxx或xxx方法(参数是集合{WebForm.class,Module.class}的4个子集),获得MethodHolder对象,不存在则利用findPage(command)方法直接查找页面,无则异常,有责直接执行doAfter(f, m)方法。
③执行IActionCommandInterceptor前置拦截器,在bean中配置,如返回Page类型,则直接放回
④执行缓存处理,若命令方法有@WebCache注解,则缓存路径,如Globals.APP_BASE_DIR/html/cache/module/cmd.index(默认是index.html),如果缓存页面存在则返回,否则在ActionContext中保存uri并CacheFinishCallback(uri)用于执行回调(用于合成模板后使用),返回null
⑤若未经过缓存页面查询或查询后得到null,则执行doXxx方法
⑥执行后拦截器方法:IactionCommandInterceptor:doAfter(method)
⑦doAfter(f, m),最后返回Page对象
如果renew为true,表示全新的跳转,返回Page(command, getUrl(command), "html"),getUrl方法:如果是module.command形式,先分离;如果参数包含showHtmlPage,则返回module/cmd.html,否则根据url的type返回module.ejf?cmd=XX或/ejf//module/cmd/
如果command为module.command形式,则返回Page("actionJump", command, "action"),action类型的page则是重新执行一次跳转,相当于执行module.ejf?cmd=command。
保存command参数到form中,执行execute(form,module)返回一个Page。
其他方法见api Doc
2.AbstractPageCmdAction extends AbstractCmdAction
execute方法首先执行super.execute(),若未找到指定页面,则默认跳转到/module/command.html,更加灵活
3.AbstractCrudAction extends AbstractPageCmdAction
通过添删改查(CRUD)处理Action类,该类封装类crud的doXxx方法,如doList,doAdd,doDelete等,用户Action继承该抽象类类,实现指定的方法即可快速开发crud应用,如crud示例所示。默认视图页面为list.html,edit.html,详见crud示例代码。
4.AjaxEngineAction implements IWebAction
处理远程脚本调用的Action引擎,ajax引擎配置文件com.easyjf.web.easyjf-web.xml,ajax下载文件uri:/ejf/easyajax/engine.js以及ajax调用方法uri:/ejf/easyajax/ajaxCall
获得methodName以及scriptName,构造RemoteCall对象:如果该scriptName服务为allow且非deny,在容器中得到相应的bean即service。然后依次分析ajax-call-p*传入参数,按type将传入参数value转换成相应的obj;按照service和参数class查找匹配的方法,判断是否为可调用远程方法(有include配置且为public方法),如是则执行该方法并返回json数据形式。转化为json数据形式是涉及到convert bean的属性可读性问题,用include或exclude控制
--------------------------------------
form中的参数:
scriptName Ajax服务bean名
easyJWebCommand ajaxCall
ajax-call-p0.java-type 参数0类型
ajax-call-p0.value 传入参数0
methodName 指定方法
remoteCallId 5836_1281253848078
---------------------------------------
10.RandomImgCode implements IWebAction
验证码图片输出