<struts-config>
<data-sources />
<form-beans >
<form-bean name="productForm" type="com.cclen.forms.ProductForm"/>
</form-beans>
<action path="/marketWeb"
type="com.cclen.actions.MarketWebAction"
name="marketWebForm"
scope="request">
<forward name="listmarkweb" path="/administrator/proxy/proxy_Add.jsp"></forward>
</action>
</action-mappings>
</struts-config>
在以easyjweb中的配置文件中,我們需要有hello.ejf來請求com.easyjweb.action.MessageAction的處理。
不過module這里還有比struts更牛比的東西配置呢,就是Module中也包含了Page對象,控制器,攔截器,注入的bean.
這里可以參考easyjweb的文檔來具體的了解。。
在struts里面中的配置文件中,我們需要有marketWeb.do來請求com.cclen.actions.MarketWebAction的處理。
哦,他們的后綴名都可以隨便的改變,在需要在web.xml中配置,你改一下試試就可以明白了。
第三:終于到了Action了,這個里面的東西我們來看看了,就我知道的說啊!在網上千萬可別罵我。
1、easyjweb中三種的Action分別是IWebAction AbstractCmdAction AbstractPageCmdAction
struts中有兩種的Acton分別是Action,DispatchAction
他們要作為父類,你要實現他們中間的方法啊!
2、easyjweb中的IWebAction相當于struts中的Action了啊!他們分別要實現的方法是:
IWebAction中要實現的方法是:
public Page execute(WebForm form, Module module) throws Exception;
struts中的Action要實現的方法是:
public ActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception ;
從這里就可以看到easyjweb的簡易,他只有兩個參數,而struts中的Action方法要有四個參數,這給測試就帶來了麻煩啊!
3、easyjweb中的AbstractCmdAction相當于struts中的DispatchAction了啊!即在一個Action中提供多個處理方法,比如說:
AbstractCmdAction中有這樣的處理方法:
public Page doAdd(WebForm form, Module module) throws Exception;
public Page doDel(WebForm form, Module module) throws Exception;
public Page doUpdate(WebForm form, Module module) throws Exception;
在請求中使用easyJWebCommand或者cmd傳遞的參數直,會作為請求執行的方法名的構成。構成的規則為doXxxx()。
如:
xxx.ejf?easyJWebCommand=add,就會執行doAdd()方法了。
這個easyjwebCommand和cmd是不用配置的,不用問他們擔心了。
那么struts中的DispatchAction中就應該有這樣的方法了
public ActionForward add(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception;
public ActionForward del(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception;
public ActionForward update(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception;
在請求中要通過struts-config.xml中的Action配置的parameter參數來傳遞,
如:
<action path="/marketWeb"
type="com.cclen.actions.MarketWebAction"
name="marketWebForm"
parameter="hahahaha"
scope="request"/>
marketWeb.do?hahahaha=del,就會執行方法
public ActionForward del(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception;
不過easyjweb中的AbstractCmdAction有一個默認的方法是:
public Page doInit(WebForm form, Module module)
這個方法是當你沒有傳入具體參數時,要調用的方法了。
就是說用 執行xxx.ejf時,就是執行上面的方法了
4、easyjweb中的AbstractPageCmdAction是非常智能的啊!struts中真的沒有了啊!easyjweb中特有的方法了。
在AbstractCmdAction的基礎上,EasyJWeb提供了另外一個對視圖具有自動識別能力的AbstractPageCmdAction。該類能通過應用“慣例代替配置”來智能判斷程序中要使用的視圖模板,甚至不需要書寫方法簽名也可以調用視圖模板。如:
public void doEdit(){}
該方法中雖然沒有一句代碼,也沒有明確的視圖切換或轉向。但AbstractPageCmdAction會根據慣例原則,自動選擇edit.html文件作為視圖模板。
這些牛牛人啊!還弄這么智能的東西出來啊。佩服佩服!
第四:來看看easyjweb和struts對表單數據的獲取和返回吧! 分別用easyjweb中的IWebAction和struts中的Action來說明問題吧!
1、用實現IwebAction就要實現方法
public Page execute(WebForm form, Module module) throws Exception;
看到了吧!其中只要兩個參數,webForm就可以解決獲取表單數據和返回頁面數據(返回頁面數據就是指在action中處理過的數據將添加到頁面上)
在WebForm中可以直接使用WebForm.get("poropertyName")來得到文本參數,而對于二進制的內容,直接使用WebForm.getFileElement("poropertyName")來處理.
一般不會用到form的,<form>元素用來定義前臺頁面表單的信息,一個WebForm就可以做到了。
WebForm還提供了兩個方法:WebForm.toPo(Object obj):傳入一個對象,直接從WebForm中拷貝值到改對象中。
WebForm.toPo(Class clazz):傳入一個類型,WebForm會初始化這個類型的實例再將WebForm中的值拷貝
具體這兩個方法的有更多的用法,請參考easyjweb的文檔:www.easyjf.com
而表示層返回數據的話,就要用new WebForm().addResult()把數據添加到Velocity上下文中。WebForm也提供了一個簡便的WebForm.addPo(obj)來處理多屬性的對象的值的添加
還要注意這點啊 !WebForm在將數據保存到Velocity上下文時,不光要保存使用addResult方法和addPo方法放入的值,還要向Velocity上下文中保存textElement中的數據,意味著重復的數據可以不用在Action中重復的添加,這在應用中需要特別注意。
2、用實現Action就要實現方法
public ActionForward execute(ActionMapping mapping,ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception ;
MessageForm messageForm = (MessageForm) form;
你可以配置ActionForm來取得數據,也可以通過request.getParameter(arg0)來去的數據,但是這里存在了情況了,但我不知道struts里面沒有沒更好的解決方法。比如說,對于二進制的內容,如果用到了org.apache.struts.upload.FormFile的話,你就必須用到ActionForm來取的數據了。
返回到表示層的數據就request.setAttribute("",object);
第五:頁面數據的輸出:
1、easyjweb中用的是Velocity作為頁面引擎的,Velocity的語法簡單,易學,并且是美工最喜歡的html頁面,在這里你是找不到java的代碼的。
2、struts有自己的標簽,或者用sun公司支持的jstl標簽,你不得不在頁面上引用對象的類型,因為你傳送到頁面上的對象他們是無法識別的。
你可以看看你的jsp頁面的頂部有沒有這樣的代碼 import="java.sql.*,java.lang.*"這就是java代碼啊!
第六:頁面的轉向。
1、easyjweb中的處理控制器就交給了Module,其實一個Module是包含著IWebAction,而在IWebAction中,卻是在調用Module的資源。
如果要返回一個Page模版頁面,只需要調用module.findPage("pageName")就能得到了。因為在Module中給我們配置了資源:
如:
<module path="/hello" form="" scope="request"
action="com.easyjweb.action.MessageAction" defaultPage="hehe">
<page name="hehe" url="/message.html" type="template" />
</module>
它<page name="hehe" url="/message.html" type="template" />就是給我們配置的模板資源,只要在com.easyjweb.action.MessageAction 中通過module.findPage("hehe")就可以調用message.html的模板了。也可以直接返回new Page(,,),如:return new Page("succ","/user/success.html","html")
2、在struts中是把頁面控制交給了ActionMapping,ActionMapping通過調用findForward(),即ActionMapping.findForward("name")轉向。
如:
<action path="/product"
type="com.cclen.actions.ProductAction"
name="productForm"
parameter="method"
>
<forward name="listproduct" path="/administrator/product/listproduct.jsp"></forward>
</action>
你需要在com.cclen.actions.ProductAction中這樣來指定頁面ActionMapping.findForward("listproduct");
第六:我再重申一下在easyjweb中struts沒有的東西。
easyjweb之所以能實現快速開發,是因為里面給我們提供了更好的實現,提供了工具類,強大的超級容器等等,由于俺是初學者,等俺精通了以后將慢慢補充easyjweb精彩方面!
posted on 2008-07-14 17:29
henry1451 閱讀(246)
評論(2) 編輯 收藏