+------------------------------------------------------------------------------------------------------+
ASP三层架构中的事件处理/表单提交(2) [2005-11-3] Xmercy 发表在 Develop
| 2.表单处理中转/工厂 在(1)中可以看到表单设置中的action值是/action/?actionID=<%=action%>,其实就是提交到这个文件(index.asp作为网站默认文档的情况下) /Action/index.asp
<!--#include file="ActionFactory.asp"--> <% Dim af : Set af = New ActionFactory With af .Execute() End With Set af = Nothing %>
这里实例化ActionFactory类,它的代码如下:
<!--#include virtual="/Class/Xml//XmlReader.asp"--> <% Class ActionFactory Private Xml Private IID Private IPath
Public Property Let Path(ByVal value) IPath = value End Property Public Property Get Path() If IsNull(IPath) Or IsEmpty(IPath) Then IPath = Request.ServerVariables("HTTP_REFERER") If IsNull(IPath) Or IsEmpty(IPath) Then Response.Redirect("/index.asp") End If Call RePath(IPath) End If Path = IPath End Property
Public Property Let ID(ByVal value) End Property Public Property Get ID() If IsNull(IID) Or IsEmpty(IID) Then IID = Request.QueryString("actionID") If IsNull(IID) Or IsEmpty(IID) Then Response.Redirect("/index.asp") End If End If ID = LCase(IID) End Property
Public Function Execute() Xml.Load("/common/Validation.xml") Dim Node : Set Node = Xml.SelectSingleNode("/formset/form[@action='" & ID & "' and @path='" & Path & "']") Server.Transfer(Node.getAttribute("class") & ".asp") End Function
Private Sub Class_initialize() Set Xml = New XmlReader End Sub Private Sub Class_Terminate() Set Xml = Nothing End Sub
Private Sub RePath(ByRef value) Dim tmpvalue : tmpvalue = value Dim Re : Set Re = New RegExp Re.Pattern = "\?.*" tmpvalue = Re.Replace(tmpvalue, "") If Request.ServerVariables("HTTPS") = "on" Then Re.Pattern = "https://" & Request.ServerVariables("SERVER_NAME") & "(:" & Request.ServerVariables("SERVER_PORT") &")?" Else Re.Pattern = "http://" & Request.ServerVariables("SERVER_NAME") & "(:" & Request.ServerVariables("SERVER_PORT") &")?" End If tmpvalue = Re.Replace(tmpvalue, "") Set Re = Nothing value = LCase(tmpvalue) End Sub End Class %>
这里读取XML配置文件,获取指定节点的class属性值,把表单称交给指定的方法处理,XML文档内容如下:
<?xml version="1.0" encoding="gb2312"?> <formset>
<form name="newsinsert" path="/admin/newsform.asp" class="news" action="insert"> <item name="Title" dataType="Limit" min="1" max="30" msg="新闻标题必须填写且在30位以内" /> <item name="Hits" dataType="Number" msg="点击数只允许为正整数" /> </form>
<form name="newsedit" path="/admin/newsform.asp" class="news" action="edit"> <item name="Title" dataType="Limit" min="1" max="30" msg="新闻标题必须填写且在30位以内" /> <item name="Content" dataType="Require" msg="请填写内容" /> <item name="Hits" dataType="Number" msg="点击数只允许为正整数" /> </form>
<form name="newslist" path="/admin/newslist.asp" class="news" action="delete"> <item name="NewsIDs" dataType="Group" min="1" msg="请选择要删除的新闻" /> </form>
<form name="modify" path="/admin/changepassword.asp" class="admin" action="modify"> <item name="oldPassword" dataType="Require" msg="请填写旧密码" /> <item name="Password" dataType="SafeString" msg="请填写新密码" /> <item name="RePassword" dataType="Repeat" to="Password" msg="两次输入的密码不一致" /> <item name="vCode" dataType="Limit" min="5" max="5" msg="请填写5位的验证码" /> </form>
<form name="classinsert" path="/admin/classform.asp" class="class" action="insert"> <item name="ClassName" dataType="Require" msg="必须填写类名" /> <item name="OrderID" dataType="Number" msg="排序号只允许为正整数" /> </form>
<form name="classedit" path="/admin/classform.asp" class="class" action="edit"> <item name="ClassName" dataType="Require" msg="必须填写类名" /> <item name="OrderID" dataType="Number" msg="排序号只允许为正整数" /> </form>
<form name="login" path="/admin/login.asp" class="admin" action="login"> <item name="UserName" dataType="Require" msg="请填写用户名" /> <item name="Password" dataType="Require" msg="请填写密码" /> <item name="vCode" dataType="Limit" min="5" max="5" msg="请填写5位的验证码" /> </form>
</formset>
(未完待续) | |
+------------------------------------------------------------------------------------------------------+ |