• 第二十八章 使用 CSP 进行基于标签的开发 - 运行时表达式


    第二十八章 使用 CSP 进行基于标签的开发 - 运行时表达式

    运行时表达式

    CSP 文档可能包含在提供页面时(即在运行时)在 CSP 服务器上运行的表达式。此类表达式使用 #(expr)# 指令分隔,其中 expr 是有效的 ObjectScriptBasic 表达式(取决于页面的默认语言;运行时表达式中使用的语言必须与 CSP 文档的默认语言匹配。)

    注意:请注意,#(expr)# 指令支持名称间接,不支持参数间接。

    例如,包含以下内容的 CSP 文档:

    Two plus two equals <b>#(2 + 2)#</b>
    
    • 1

    在生成的类中生成以下代码:

    Write "Two plus two equals ", (2 + 2), "",!
    
    • 1

    反过来,它将以下内容发送到 HTTP 客户端:

    Two plus two equals <b>4</b>
    
    • 1

    运行时表达式示例;

    • 页面前面设置的变量的值
    The answer is <b>#(answer)#</b>.
    
    • 1
    • 对象属性或方法
    Your current balance is: <b>#(account.Balance)#</b>.
    
    • 1
    • %ResultSet中的字段在对象中
    <table>
    <csp:while condition="result.Next()">
    <tr><td>#(result.Get("BookTitle"))#</td></tr>
    </csp:while>
    </table>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 使用 %request 对象的 URL 参数
    <table bgcolor='#(%request.Data("tablecolor",1))#'></table>
    
    • 1

    运行时表达式可以位于 CSP 文档中 #(expr)# 结构可用作合法 HTML 的任何位置。这包括在 HTML 文本中,作为 HTML 元素属性的值,或在客户端 JavaScript 代码的定义中。

    如果运行时表达式的值包含任何特殊字符(例如 < or > 、尖括号),需要对它们进行转义以向 HTTP 客户端发送正确的转义序列。要转义它们,请在类中使用 %CSP.Page 提供的转义方法之一。下面的示例显示了 EscapeHTML 类方法。运行该方法时,object.Description 中存在的任何需要转义的字符都将替换为其 HTML 转义序列。

    Description: <b>#(..EscapeHTML(object.Description))#</b>.
    
    • 1

    如果在 HTML 属性值中使用运行时表达式,则在运行时表达式中找到的任何 HTML 实体都将转换为它们所代表的字符,然后再转换为可执行代码。例如:

    <font size=#(1 &gt; 0)#>
    
    • 1

    在生成的类中生成以下代码:

    java
     Write "",!
    
    • 1
    • 2

    运行时代码

    如果需要的不仅仅是一个简单的表达式在页面内的 CSP 服务器上运行,可以使用