第四十六章 开发自定义标签 - 标签匹配 操作中的运行时表达式

简介: 第四十六章 开发自定义标签 - 标签匹配 操作中的运行时表达式

第四十六章 开发自定义标签 - 标签匹配 操作中的运行时表达式

指定标签的属性值,方法是将属性值放在方括号内,标签名称后是[ ]

<csr:rule>标记的match属性定义了CSP编译器应该将什么识别为规则,然后执行指定的操作。match属性是由/(斜杠)字符分隔的一个或多个标记名组成的字符串。如果有一个以上的标记名,则假定它们是嵌套的,从左到右指定,从最外面的标记到最里面的标记。*(星号)字符是匹配任何标签的通配符。

为了更好地说明这一点,让我们看看下表中的一些匹配值示例。

为匹配的最内层标签触发一个规则。如果相同的标记有多个规则定义,CSP编译器会通过确定哪个匹配值最具体来确定使用哪个规则。例如,AAA/ BBB的规则比BBB的规则更具体。类似地,指定属性值的规则,比如BBB[CCC],比不指定属性值的规则BBB更具体。

标签匹配的示例

匹配值 规则被触发:
AAA 每当遇到<AAA>标记时:<AAA></AAA>
AAA/BBB 每当遇到直接嵌套在<AAA>标签中的<BBB>标签时:<AAA> <BBB></BBB> </AAA>
AAA/*/BBB <BBB>标签嵌套在<AAA>标签的任何地方时:<AAA><FFF> <BBB></BBB> </FFF></AAA>
AAA[CCC] 当遇到带有CCC属性(有任何值)的<AAA>标签时:<AAA CCC= " 10 " ></AAA>
AAA[CCC=22] 当遇到CCC属性值为“22”<AAA>标签时:<AAA CCC= " 22 " ><AAA>
AAA[CCC=22]/*/BBB <BBB>标签嵌套在具有值为“22”CCC属性的<AAA>标签中的任何地方时:<AAA CCC= " 22 " ><FFF> <BBB></BBB> </FFF></AAA>

规则操作中的服务器端表达式和代码

规则中的操作可能包含在执行页面(运行时)或编译页面(编译时)时执行的表达式和代码。

操作中的运行时表达式

要在操作中指定运行时表达式,请使用可以在CSP页面中使用的相同的#(expr)#语法。 例如,下面是一个规则的定义,它定义了一个<TODAY>标签,使用Caché $ZDATE命令显示当前时间:

<csr:rule name="TODAY" match="TODAY" empty>
<csr:action>
Today is: <b>#($ZDATE($H))#</b>
</csr:action>
</csr:rule>
复制代码

如果你加载了这个规则,你可以把它放在CSP页面的主体中:

<TODAY>
复制代码

当请求页面时,显示当前日期。

动作中的编译时表达式

要在操作中指定编译时表达式,请使用##(expr)##语法。 例如,下面是一个规则的定义,该规则定义了一个标记<LASTMOD>,该标记显示CSP页面最后一次编译的时间。 在编译页面时计算##()##表达式。 计算表达式的结果成为生成的CSP页面的静态部分。

<csr:rule name="LASTMOD" match="LASTMOD" empty>
<csr:action>
This page was last compiled on: <b>##($ZDATE($H))##</b>
</csr:action>
</csr:rule>
复制代码

可以在运行时表达式中包含编译时表达式。 在下面的例子中,第一个$H在运行时计算,给出当前日期。 第二个函数在编译页面时计算,返回页面编译的日期。

This page is #(+$H - ##(+$H)##)# days old.
复制代码

<script>操作中的标签

类似地,可以在一个操作中包含多行代码,使用<script language=cache runat=server>标记表示运行时代码,使用<script language=cache runat=compiler>标记表示编译时代码。 例如,下面是一个规则,它创建了一个包含100项的无序列表:

<csr:rule name="BIGLIST" match="BIGLIST" empty>
<csr:action>
<ul>
<script language="Cache" runat=server>
For i = 1:1:100 {
    Write "<li>Item " _ i _ $C(13,10)
}
</script>
</ul>
</csr:action>
</csr:rule>
复制代码

如果你加载了这个规则,你可以像这样把它放在CSP页面的主体中:

<BIGLIST>
复制代码

当请求该页面时,将显示一个包含100项的无序列表。

相关文章
|
前端开发 JavaScript
纯样式或使用JS的canvas实现图片旋转
纯样式或使用JS的canvas实现图片旋转
209 0
|
数据安全/隐私保护
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等
402 0
|
4月前
|
Kubernetes Linux 开发者
在CentOS 7.8上使用kubeadm安装k8s 1.26
至此,你已经在CentOS 7.8上使用kubeadm成功安装了k8s 1.26。你可以通过输入 `kubectl get nodes`来查看节点状态,如果显示为Ready,那么恭喜你,你的Kubernetes集群已经准备好了。
197 23
|
8月前
|
存储 算法 Java
面试必备!一文搞懂HashMap如何优雅处理哈希冲突
大家好,我是小米,一个积极的程序员。今天聊聊Java面试中的常见问题——“HashMap是怎么解决哈希冲突的?”。通过一个小故事,我们了解到HashMap使用链地址法(JDK 1.8前)和红黑树(JDK 1.8后)来处理哈希冲突。链地址法用链表存储冲突的元素,而红黑树在链表长度超过8时启用,提升查找效率。希望这个讲解能帮助你更好地理解HashMap的工作原理。欢迎留言讨论,关注我的公众号“软件求生”,获取更多技术干货!
242 3
|
12月前
|
SQL 分布式计算 DataWorks
dataworks学习
【9月更文挑战】
367 5
|
11月前
|
机器学习/深度学习 监控 数据可视化
深度学习中实验、观察与思考的方法与技巧
在深度学习中,实验、观察与思考是理解和改进模型性能的关键环节。
258 5
|
8月前
|
机器学习/深度学习 人工智能 算法
《AI芯片:如何让硬件与AI计算需求完美契合》
在人工智能快速发展的今天,AI芯片成为推动该领域前行的关键力量。AI芯片如同“超级大脑”,支撑着从智能语音助手到自动驾驶汽车等各种复杂应用。它通过GPU、ASIC和FPGA等架构,优化矩阵运算、内存管理和数据传输,满足大规模数据处理需求。尽管面临通用性和成本挑战,未来AI芯片有望在异构计算、新兴技术和降低成本方面取得突破,为AI发展注入强大动力。
390 17
|
9月前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
Java 数据库连接 mybatis
一文彻底搞懂Mybatis系列(十二)之MyBatis多对一映射延迟加载(association和lazyLoadingEnabled)
一文彻底搞懂Mybatis系列(十二)之MyBatis多对一映射延迟加载(association和lazyLoadingEnabled)
214 0
|
iOS开发
UML-时序图
UML-时序图
261 0

热门文章

最新文章