在您临时产生 HTML 页面的某些部分的情况下,文本替换是非常有用的。例如,当进入到您应用程序以前的一个页面时,您可能想使一个 Web 页面带有用户的名字。您可以在此.htm 文件中插入一个替换指示符,然后在运行时用用户的名字替换它。
在一个更加复杂的例子中,假设您想将一个数据库查询的结果填充到一个表中。您可以在 HTML 的表中使用替换指示符来标记将信息放到何处,接着在运行查询后用获取的信息替换这些指示符。
执行文本替换的过程包括:在一个 webclass 模板文件中扫描特殊的指示符标记,以及用自定义的内容替换指示符标记或它们的内容。当 webclass 在一个事件过程中响应 WriteTemplate 方法时,它自动地处理这些指示符。在完成所有的替换后,WriteTemplate 发送一个 HTML 模板文件的内容到浏览器,
在服务器上处理的标记具有下面的格式:
这些元素合起来向 webclass 提供了处理标记时需要的信息。您可以在文件中希望系统执行替换的每一个位置插入这些指示符。
详细信息 关于 WriteTemplate 方法和它的处理过程的详细信息,请参阅“发送 HTML 到浏览器”,和《语言参考》中的“ProcessTag 事件”。
为了执行文本替换,首先在 Webclass 设计器中对模板定义一个标记前缀,然后使用编辑器将这些标记前缀插入到文件发生替换的位置。您可以在一个文件中按您的需要指示多个替换区域。
例如,假设在您的 webclass 中有一个叫做 FeedbackPage 的模板,在这个页面中,您想在两个区域执行一个替换:您要在将发出的用户订单页面上插入用户的名字和日期。您已经定义了这个 webitem 的标记前缀是 WC@。
注意 标记前缀必须以一个字母字符开头,并且应当包含一个提供优化处理的特殊字符。
假设在添加替换标记前,您的 FeedbackPage 文件象如下样式:
<HTML>
<BODY>
<P>Thank you for your order. We estimate that your order will be shipped on the following date: xxx.
<P>
</BODY>
</HTML>
为了指示名字和日期的替换区域,您应当按如下所示修改文件:
<HTML>
<BODY>
<P>Thank you for your order, <WC@customer>firstlast</WC@customer>. We estimate that your order will be shipped on the following date: <WC@shipdate>shipdate</WC@shipdate>.
<P>
</BODY>
</HTML>
下图标识了前面的代码中的替换区域部分:
替换指示符
在 ProcessTag 事件中编写所有的代码去替换您文件中的文本。如果您有一个包含几个替换区域的模板文件,并且在您的过程中需要对它们区别对待,则应当使用一个条件语句,例如 If 或Select Case 对页面中的每一个标记前缀指定不同的操作。
对含有标记前缀文件的处理次序是:
注意 ProcessTag 事件不能被浏览器中用户的操作自动激发。它由另一个事件过程中的 WriteTemplate 方法调用。
例如,在前面部分的例子中,您修改一个.htm 文件以包括两个替换区域:一个叫做“customer”、另一个叫做“shipdate”。下面的事件过程可以用来处理这些替换:
Sub FeedbackPage_ProcessTag(ByVal TagName as String, TagContents as _ String, SendTags as Boolean) '
使用以前定义的变量FirstName
、LastName
、'
和ShipDate
If TagName = "wc@customer" Then
TagContents = FirstName & "" & LastName
EndIf
If TagName = "wc@shipdate" Then
TagContents = ShipDate
EndIf
SendTags = False
End Sub
在这段代码中,webclass 从几个成员变量中检索信息,这些变量在以前被设置为用户输入的值。这些值对应于用户的名、姓、一个计划的运送日期。从这三个变量来的值被插入到页面中,然后显示给用户。
当 ProcessTag 事件被激发时,TagContents 参数检索.htm 文件中标记之间文本的当前值。例如,在 HTML 代码的下面行中,“customer”是 TagContents 参数的当前值。
<P>Thank you for your order, <WC@customer>customer</WC@customer>.
在 ProcessTag 事件过程中对 TagContents 设置新值。您可以利用已存在的内容来帮助获取这些新值。例如可以使用一个数据库的关键字作为 TagContents,然后在 ProcessTag 事件过程中引用那个值从该数据库中获取一个记录。
要对应用程序中的一个 webitem 执行文本替换,请按照以下步骤执行:
注意 标记前缀必须以一个字母字符开头。
<tagprefix tagname>tagcontents</tagprefix tagname>
参数 | 定义 |
Tagprefix | 在“属性”窗口中对这个模板定义的标记前缀。 |
Tagname | 一个唯一的标识符,在代码中通过它将引用这个替换区域。例如,对用于插入顾客订单号码的一个标记前缀,您可以使用“orderno”这个标记名。 |
Tagcontents | 要插入内容的占位符。这个参数也可以被用于提供有关内容的信息,或被用于保留处理替换时需要的信息,例如一个数据库关键字。 |
在通常的替换处理中,当 webclass 处理 WriteTemplate 事件时,它自动地扫描一次.htm 文件,查找文件中所有的标记前缀。找到这些替换区域后,webclass 处理这些标记并按照代码中的指示替换它们。然而,当替换这些原始标记中的某个标记时,代码可能指示 webclass 应该插入另外的标记前缀。在这种情况下,webclass 必须对这些新的替换指示符再一次搜索替换区域并处理它们。
您可以通过设置该 webitem 的 ReScanReplacements 属性告诉 webclass 再搜索一次。该 ReScanReplacements 属性会引起 webclass 在 ProcessTag 事件期间发生另一次外扫描替换标记。对您产生的任何附加的替换区域,要使 ProcessTag 事件也能处理到,则必须为其编写代码。
注意 ReScanReplacements 属性只有在 ProcessTag 事件期间才告诉 webclas s再做一遍搜索。在其他的事件期间,不能使用这个属性扫描替换区域。
要使 webclass 能递归地检查文件新的标记前缀,请