接口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方法,如say hello示例所示,也可以繼承IWebAction的實現類,在crud示例中,繼承AbstractCrudAction類快速開發增刪查改應用。
IWebAction接口的實現類分佈如下包中,接下來各包中的類做些介紹:
package:com.easyjf.web.core
1.AbstractCmdAction
2.AbstractPageCmdAction
3.AbstractWizardAction
package:com.easyjf.web
4.Action
package:com.easyjf.web.tools
5.AbstractCmdAction
6.AbstractCmdAAction
7.AbstractCrudAction
8.AbstractPageCmdAction
9.CrudAction
10.RandomImgCode
11.RichComponentAction
12.ServiceCrudAction
13.WidgetAction
package:com.easyjf.web.ajax
14.AjaxEngineAction
-------------------強大的分割線-------------------------
1.AbstractCmdAction implements IWebAction
對Action命令進行封裝的抽象類,用於爲提供命令式WebAction的寫法用戶直接調用,可以減少書寫繁鎖的if語句,cmd命令del對應類中doDel或del方法。
execute(WebForm, Module)方法:
①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對象
forward(String command, boolean renew)方法:
如果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。
go(command)==forward(command, true)
page(name)==module.findPage(name):查找全局頁面--->在module配置中查找page--->查看默認情況DEFAULT_TEMPLATE_PATH/module.getViews()/module/name.html
其他方法見api Doc
2.AbstractPageCmdAction extends AbstractCmdAction[1]
其execute方法首先執行super.execute(),若未找到指定頁面,則默認跳轉到/module/command.html,更加靈活
3.AbstractWizardAction extends AbstractCmdAction[1]
基於嚮導的Action支持基類,可以保存每一步命令鏈,默認statusCheck爲false
4.Action implements IWebAction
簡單的IWebAction默認實現示例,返回module的defaultPage
5.AbstractCmdAction @Deprecated
6.AbstractCmdAAction @Deprecated
7.AbstractCrudAction extends AbstractPageCmdAction[2]
通過添刪改查(CRUD)處理Action類,該類封裝類crud的doXxx方法,如doList,doAdd,doDelete等,用戶Action繼承該抽象類類,實現指定的方法即可快速開發crud應用,如crud示例所示。默認視圖頁面爲list.html,edit.html,詳見crud示例代碼。
8.AbstractPageCmdAction @Deprecated
9.CrudAction extends AbstractCrudAction[7]
添加改查模型的基類,實現基本的添刪改查、分頁等功能。該類通過子類中提供的具體的entityClass方法及getDao方法來進行工作。
子類一般的實現如下所示:
public class PersonAction extends CrudAction {
@Inject(name = "personDao")
private GenericDAO<Person> dao;
public void setDao(GenericDAO<Person> dao) {
this.dao = dao;
}
protected Class entityClass() {
return Person.class;
}
public GenericDAO getDao() {
return dao;
}
}
10.RandomImgCode implements IWebAction
驗證碼圖片輸出
11.RichComponentAction extends AbstractPageCmdAction[2]
富客戶端組件類?不知道怎麼用
12.ServiceCrudAction extends AbstractCrudAction[7]
基於包含Crud操作的Service增刪改查應用的基類,該類需要子類提供一個EntityCrudService才能工作。
13.WidgetAction extends AbstractCmdAction[1]
實用控件集合,給Web應用程序開發提供實用的控件。所有的控件調用通過這一個action來處理
有兩個方法:
public Page doCalendar(WebForm form, Module module) {
return module.findPage("calendar");
}
public Page doLoadPage(WebForm form, Module module) {
String url = (String) form.get("url");
return new Page(url, url, "template");
}
14.AjaxEngineAction implements IWebAction
處理遠程腳本調用的Action引擎,ajax引擎配置文件com.easyjf.web.easyjf-web.xml
ajax下載文件/ejf/easyajax/engine.js以及ajax調用方法/ejf/easyajax/ajaxCall
doAjaxCall(WebForm, Module):
調用ajax方法是:uri爲/ejf/easyajax/ajaxCall
form中的參數:
scriptName Ajax服務bean名
easyJWebCommand ajaxCall
ajax-call-p0.java-type 參數1類型
ajax-call-p0.value 傳入參數1
methodName 指定方法
remoteCallId 5836_1281253848078
通過RemoteCall.execute執行ajax調用。