亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

靈活的視圖切換及導向

系統 1782 0

  在基于請求轉發型的MVC框架中,給用戶提供一個簡單、靈活的視圖切換及頁面導向功能是非常關鍵的。作為EasyJWeb特性介紹系統的一篇文章,本篇主要介紹EasyJWeb中的頁面切換及導向機制。EasyJWeb引入了純模板的機制,通過其提供結構清晰的Module、Command、Page等結構,從而能實現非常簡單靈活的視圖切換及導向。
1、快捷方法,使用最簡單的方式滿足你80%的視圖切換及頁面導向需求
  在AbstractCmdAction中,提供了forward及go方法來滿足不同的頁面導向需求。下面給出具有代表性的視圖切換及頁面導向示例:
forward(“list”)-轉到本模塊中的list命令處執行;
forward(“person.new”)-轉到person模塊中的new命令執行;
forward(“new”,”person”)-與forward(“person.new”)相同;
page(“list”)-直接使用邏輯名稱為list模板來作當前命令的輸出;
go(“list”)-開啟一個全新的request請求,執行當前模塊的list命令;
go(“person.list”)-開啟一個全新的request請求,執行person模塊的list命令;
go(“list”,”person”)-與go(“person.list”)相同;
go(“list?parentId=5”)-開啟一個全新的request請求,執行list命令,并往action中傳遞parentId參數。

2、視圖切換及對象
  EasyJWeb中的頁面結果是由Page來代表的,當前只提供了三種類型的Page,即template、html及null。其中template代表模板頁面,html代表導向頁面,null表示不返回信息。可以通過每一個Action中的execute方法中的Module參數,來讀取配置

public ? void ?doEdit()
{
}

在當前模塊的Page。
如return module.finadPage(“list”);
也可以在Action中直接構造一個Page對象來進行視圖的切換及導向。
如 return new Page(“index”,”/news/index.html”);

3、聰明的AbstractPageCmdAction
  在AbstractCmdAction的基礎上,EasyJWeb提供了另外一個對視圖具有自動識別能力的AbstractPageCmdAction。該類能通過應用“慣例代替配置”來智能判斷程序中要使用的視圖模板,甚至不需要書寫方法簽名也可以調用視圖模板。
如一個空簽名的command方法:

  該方法中雖然沒有一句代碼,也沒有明確的視圖切換或轉向。但AbstractPageCmdAction會根據慣例原則,自動選擇edit.html文件作為視圖模板。
  另外針對下面的 url:person.ejf?cmd=new 或/ejf/person/new
假如PersonAction中沒有doNew方法,則AbstractPageCmdAction會根據慣例原則,優先考慮/views/person/目錄中是存存在new.html文件,若存在,則將直接返回該模板,即不用寫java方法,也能產生動態頁面。

  作為一個應用實踐之一,在我們開發一般的WEB應用中,我們習慣于把前臺及后臺分開,比如所有前臺展示的放在一個模塊Module(即Action)中。網站前臺經常會有非常多的頁面,而這些頁面或多或少都會包含相同或相似邏輯的動態內容,此時若針對每一個頁面都寫一個Command來處理,顯得很麻煩。可以借助Velocity的標簽,以及AbstractPageCmdAction中的視圖界面智能選擇功能,不用寫java方法,即加載各種動態頁面。
  下面是EasyJF官方網站NewsAction中的代碼,類似這樣的代碼同也用于很多EasyJF開源團隊所開發的開源及商業項目中:

public ? class ?NewsAction? extends ?AbstractPageCmdAction? {
?
private ?NewsUtil?newsUtil;
?@InjectDisable
?
private ?Map?utils? = ? new ?HashMap();
?
public ? void ?setNewsUtil(NewsUtil?newsUtil)? {
??
this .newsUtil? = ?newsUtil;
?}

?
public ? void ?setUtils(java.util.Map?utils)? {
??
this .utils? = ?utils;
?}


?
public ?Object?doAfter(WebForm?form,?Module?module)? {
??form.addResult(
" nu " ,?newsUtil);
??form.addResult(
" NU " ,?newsUtil);
??java.util.Iterator?it?
= ?utils.entrySet().iterator();
??
if ?(it? != ? null )? {
???
while ?(it.hasNext())? {
????Map.Entry?en?
= ?(Map.Entry)?it.next();
????form.addResult((String)?en.getKey(),?en.getValue());
???}

??}

??
return ? super .doAfter(form,?module);
?}

}


?

/news.ejf?cmd=index
/news.ejf?cmd=technic
/news.ejf?cmd=download
  可以這么說,前臺諸多的動態頁面,都不需要書寫Java代碼,就能實現動態內容生成。如果你借助一些基礎引擎,比如EasyJF開發的CMS引擎來或者是自己構造一些引擎,完全可以實現不用寫Java代碼,就能開發出功能比較強的Java Web應用。比如建一個站點、建論壇、百科、Blog、全文檢索等。
4、重定向輸出流
假如你希望你Action的執行結果不要直接輸出的瀏覽器上,而是直接輸出到服務器上的一個文件中保存起來(生成靜態html是我們在建大型網站中所必須的),或者是輸出到互聯網上的某一個終端或結點。EasyJWeb給你提供了最簡單解決方案,你隨時可以根據需要對Action執行結果進行重定向,比如下面的Action中,我們可以把輸出結果指定到服務器上d:\myapp\news.html文件中。

public ? void ?doNews() {
java.io.Writer?writer
= ? new ?OutputStreamWriter( new ?FileOutputStream( new ?File( " d:\myapp\news.html " )), " UTF-8 " );
ActionContext.getContext().setCustomWriter(writer);
// 執行news命令的一系列邏輯
page(“news”); // 使用news模板來輸出結果
}

?

?



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1752356


靈活的視圖切換及導向


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 真人毛片免费拍拍拍aa视频 | 狠狠色丁香婷婷综合激情 | 精品哟哟国产在线观看 | 久久欧美精品欧美九久欧美 | 狠狠澡夜夜澡人人爽 | 国产精品福利午夜h视频 | 网站久久 | 可以直接看的毛片 | 久久天天躁狠狠躁夜夜呲 | 久艹在线观看视频 | 欧美黑人乱大交ⅹxxxxx | 好吊妞在线播放 | 欧美与黑人午夜性猛交久久久 | 中文字幕免费视频 | www.青草视频 | www深夜视频在线观看高清 | 国产一在线精品一区在线观看 | 久热草视频 | 伊人情人综合成人久久网小说 | 欧美精品xxxⅹ欧美 欧美精品成人 | 手机看片自拍日韩日韩高清 | 日日综合网 | 亚洲欧美在线免费 | 日韩欧一级毛片在线播无遮挡 | 好吊妞视频在线 | 日本黄 色 成 年 人免费观看 | 成人综合久久精品色婷婷 | 亚洲国产女人aaa毛片在线 | 欧美激情特级黄aa毛片 | 色综合五月婷婷 | 97人人艹| 久久成人国产精品 | 欧美精品免费看 | 女人18特级一级毛片免费视频 | 久久爱综合网 | 色天使色婷婷丁香久久综合 | a v在线男人的天堂观看免费 | 精品久久香蕉国产线看观看亚洲 | 99高清免费国产自产拍 | 欧美日韩成人高清色视频 | 天天插夜夜爽 |