转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Web Application 開 發 利 器 - WebSnap(六)         ★★★★

Web Application 開 發 利 器 - WebSnap(六)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:887 更新时间:2009/4/23 18:41:42

Web Application 開 發 利 器 - WebSnap!

第 六 章 、 執 行 者 : TAdapterDispatcher 及 AdapterAction

 

 6-1 Action 的 運 作 原 理

 

  在 第 一 章 的 Modules 中 我 們 稍 微 討 論 了 Dispatcher 在 整 個 WebSnap 中 扮 演 著 那 一 種 角 色 , 除 了 PageDispatcher 是 用 來 導 向 某 個 網 頁 外 , WebSnap 中 還 有 另 一 個 很 重 要 的 Dispatcher 元 件 : TAdapterDispatcher , 還 記 得 我 們 使 用 ActionButton 前 必 須 要 設 定 她 的 ActionName 特 性 值 嗎 ? 這 就 是 供 TAdapterDispatcher 使 用 的 資 訊 , 你 在 使 用 了 ActionButton 的 網 頁 中 應 該 會 看 到 類 似 下 面 的 Script 程 式 碼 :

 

<input type="submit" value="EditRow" onclick="AdapterForm1.__act.value=''''<%=vdsAdaptCust_EditRow.LinkToPage("Edit", Page.Name).AsFieldValue%>''''">

 

轉 成 網 頁 後 會 變 成 下 面 這 段 HTML 程 式 碼 :

 

<input type="submit" value="Query" onclick="AdapterForm2.__act.value=''''__sp.4.Edit__fp.5.Error__id.19.Grid.Adapter1.Query''''">

 

onclick 內 的 字 串 會 被 送 往 TAdapterDispatcher , 她 再 藉 由 藍 色 字 的 部 份 解 出 Action 資 訊 。 __sp 代 表 的 是 Action 執 行 成 功 後 轉 向 的 網 頁 名 稱 , __fp 則 是 失 敗 後 轉 向 的 網 頁 名 稱 , 在 這 裡 沒 有 出 現 的 另 一 個 __cp 則 是 目 前 網 頁 名 稱 。 Grid.Adapter1.Query 就 是 Action 的 名 稱 與 所 在 的 Module 及 Adapter , 接 著 TAdapterDispatcher 會 藉 著 Grid.Adapter1.Query 字 串 來 搜 尋 出 正 確 的 Module 並 建 立 她 。 看 到 這 裡 你 應 該 有 點 概 念 了 , 建 立 Module 後 就 是 取 得 Adapter 並 執 行 Query 這 個 Action 了 。 那 為 何 要 將 成 功 與 失 敗 的 網 頁 也 存 到 這 個 字 串 中 呢 ? 這 帶 出 了 Action 的 另 一 面 , 技 術 上 而 言 , 你 可 能 會 因 為 適 應 情 況 的 不 同 在 程 式 中 改 變 Action 中 這 兩 個 特 性 值 , 但 是 這 可 能 會 造 成 一 些 問 題 。 例 如 執 行 Action 這 一 個 動 作 時 沒 有 通 過 你 的 這 段 程 式 碼 , 那 麼 這 兩 個 特 性 值 就 變 成 了 預 設 值 了 , 執 行 後 當 然 是 錯 誤 收 場 , 所 以 Action 提 供 了 OnGetParam 及 OnExecute 兩 個 事 件 , 當 Action 被 顯 示 前 , 也 就 是 說 輸 出 成 上 面 那 段 字 串 之 前 會 觸 發 OnGetParam 事 件 , 你 可 以 在 裡 面 加 上 你 要 保 留 的 參 數 , 在 這 個 Action 被 執 行 時 這 些 參 數 就 會 被 送 往   OnExecute 事 件 了 , 請 看 下 圖 :

( 圖 :7)

我 們 可 以 在 OnExecute 這 個 事 件 中 將 參 數 取 出 並 作 出 正 確 的 回 應 動 作 , 有 了 這 些 概 念 後 我 們 就 可 以 解 釋 下 面 這 段 碼 的 意 義 了 :  

<input type="submit" value="EditRow" onclick="AdapterForm1.__act.value=''''_lCustNo.4.1356__sp.4.Edit__fp.4.Grid__id.24.Grid.dsAdaptCust.EditRow''''">

上 面 這 段 碼 來 自 於 我 們 的 Grid Page 中 , 除 了 之 前 我 們 談 過 的 參 數 外 , 你 還 可 以 看 到 _l 這 個 值 , 這 是 一 個 Key 值 , 用 來 在 Action 執 行 時 將 DataSet 的 記 錄 移 往 這 一 筆 , 當 EditRow Action 將 網 頁 導 向 Edit PageModule 時 就 可 以 顯 示 出 正 確 的 記 錄 了 , 最 後 讓 我 們 看 一 下 Edit 的 Apply Action 的 值 :

<input type="submit" value="Apply" onclick="AdapterForm1.__act.value=''''_lCustNo.4.1221__sp.4.Grid__fp.4.Edit__id.22.Edit.dsAdaptCust.Apply''''">

你 應 該 能 解 釋 這 個 Action 了 吧 , 不 過 單 單 只 有 這 個 Action 是 無 法 解 釋 整 個 Apply 動 作 的 , 熟 悉 網 頁 設 計 的 人 都 知 道 , 當 我 們 在 處 理 資 料 庫 的 網 頁 時 , 我 們 會 將 記 錄 的 原 值 以 Hidden Field 狀 態 存 放 在 網 頁 中 , 當 使 用 者 Apply 之 後 , 我 們 再 將 原 值 與 控 制 項 中 的 新 值 做 比 對 , 接 著 利 用 這 些 原 值 來 取 得 正 確 的 記 錄 並 儲 存 。 要 了 解 WebSnap 處 理 這 個 流 程 的 整 個 動 作 , 我 們 必 須 從 Edit 網 頁 中 這 段 Script 程 式 開 始 :

<input type="hidden" name="__am.dsAdaptCust" value="Edit">

<input type="hidden" name="__ov.CustNo" value="1221">

… … … … ..

<input type="hidden" name="__key." value="CustNo.4.1221">

我 們 先 看 到 __am 這 一 行 , 這 一 行 就 是 你 在 FieldGroup 中 的 AdapterMode 設 定 , WebSnap 用 這 一 行 來 判 別 Action 發 生 時 AdapterMode 是 處 於 那 一 種 狀 態 。 下 面 的 __ov 則 是 CustNo 的 原 值 , 接 著 __key 這 一 行 你 應 該 知 道 是 作 何 用 途 的 吧 , 但 你 可 能 會 疑 惑 , 為 何 有 兩 個 同 樣 用 途 的 值 存 在 呢 ? Action 中 不 是 已 經 有 這 個 值 了 嗎 ? 你 還 記 得 MasterDetailEdit 網 頁 中 我 們 允 許 使 用 者 在 裡 面 編 修 多 筆 明 細 資 料 嗎 ? 你 可 以 試 著 改 變 一 筆 以 上 的 記 錄 後 按 下 任 一 筆 記 錄 後 的 Apply 欄 位 , 你 會 發 現 所 有 的 編 修 都 被 接 受 了 , 如 果 只 有 一 個 Action 內 的 Key 值 是 辦 不 到 的 不 是 嗎 ? 這 就 是 這 個 值 存 在 的 意 義 。 如 果 你 觀 察 MasterDetailEdit 內 的 Action 及 HiddenFields , HiddenRecordFields 資 訊 的 話 , 你 會 發 現 到 在 Action 與 __key 值 內 也 包 含 了 Master-Detail Key 的 資 訊 , 到 這 裡 為 止 , 你 應 該 能 夠 理 解 Action 是 如 何 動 作 的 , 又 為 何 這 樣 設 計 , 你 也 可 以 撰 寫 自 定 的 Action 來 簡 化 你 的 工 作 , 這 些 我 們 留 待 在 Inside WebSnap 篇 再 詳 細 討 論 了 。

  

6-2 神 秘 的 Action: DefaultAction

 

當 你 利 用 設 定 Action 的 PageName 來 轉 向 某 一 個 Page Module 時 , 如 果 該 Page Module 中 設 定 了 DefaultAction 的 話 , 你 可 以 利 用 Action 中 的 RedirectOptios 特 性 值 來 決 定 是 否 觸 發 DefaultAction:

 

 

當 你 設 定 Action 的 RedirectOptios 為 roRedirectHTTPPost 時 , 當 執 行 Action 轉 向 該 Page Module 時 就 會 觸 動 該 Page Module 中 的 DefaultAction 事 件 , 但 有 一 點 必 須 要 小 心 , 當 DefaultAction 中 的 Action 也 設 定 為 roRedirectHTTPPost 時 會 進 入 無 窮 迴 圈 , 這 個 技 術 可 以 用 在 使 用 者 執 行 Action 後 將 她 導 向 此 網 頁 時 , 在 目 的 網 頁 輸 出 前 執 行 一 些 初 使 化 動 作 , 與 OnBeforeDispatchPage 不 同 , 她 只 在 Action 或 是 呼 叫 RedirectToPage 導 向 時 被 啟 動 , OnBeforeDispatchPage 則 是 在 網 頁 輸 出 前 被 啟 動 , 使 用 DefaultAction 或 是 OnBeforeDispatchPage 需 視 你 的 需 求 而 定 , 如 果 你 初 始 化 動 作 必 需 在 網 頁 輸 出 前 初 始 化 , 那 你 應 該 寫 在 OnBeforeDispatcher , 如 果 你 需 要 在 Action 導 向 時 或 是 明 白 呼 叫 RedirectToPage 轉 向 時 處 理 一 些 初 始 化 動 作 的 話 , 使 用 DefaultAction 會 是 較 好 的 選 擇 , 當 然 ! 實 務 上 這 兩 者 有 可 能 都 會 用 到 , 這 時 要 小 心 , 兩 者 有 可 能 都 會 被 觸 發 , DefaultAction 的 OnExecute 是 第 一 個 被 觸 發 的 動 作 , 接 著 才 是 OnBeforeDispatchPage 。

 

本 章 後 記

這 一 章 中 我 與 你 討 論 了 Action 在 WebSnap 中 的 定 義 及 運 作 流 程 , 還 有 WebSnap 如 何 與 Hidden Field 互 動 , 這 些 資 訊 對 於 你 探 索 Action 或 撰 寫 Action 元 件 是 很 有 用 的 。

 

<第 七 章 、 深 入 Adapter>


[聊天工具]Gmail推出新功能:Web Clip__天极Yesky  [聊天工具]Web MSN你玩了吗__天极Yesky
[系统软件]Web Browser Express 概述  [系统软件]对Internet Explorer Web 控件做一点修改
[常用软件]小技巧:三步实现Web迅雷录制PPLive节目  [常用软件]天网防火墙:打开WEB和FTP服务
[VB.NET程序]使用VB.Net做一个配置web.config功能的WinForm(原…  [VB.NET程序]vb.net控件、web service简述
[VB.NET程序]使用vbscript脚本调用web服务  [VB.NET程序]*** Web 存储系统窗体:窗体注册表 (new)***
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台