No Comment

 我的日历
 最新评论
 友情链接
  访问计数

  收藏本站  设为首页

 

+------------------------------------------------------------------------------------------------------+

 

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>

(未完待续)
≡≡≡≡≡ 评论(共 条)我要评论

+------------------------------------------------------------------------------------------------------+


          Designed by ArPan     Powered by 5DBlog