easyjweb IWebAction介紹

 

接口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調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章