zoukankan      html  css  js  c++  java
  • ZK EL表达式

    一、与Java区别

    1.一个字符串可以用单引号或双引号括起来。换句话说,'abc’和”abc”是相同的

    2.empt操作可以验证String、list、map是否为空或者是null例如:${empty param.add}如果add是空的返回true,否则false。

    3. 点(.) 操作符是允许你使用一个Map键或者一个bean性质名来访问值。例如:${foo.value.name}

    4.[]操作符可以用来访问数组和list、map键值、bean性质对象。如:${ary[5]}、${wnd[‘title’]}.

    5.如果没有值或者数组越界则返回null

    二、结合Java

    EL表达式求值时,在服务器的页面呈现。因此,它是允许访问

    1.可以用组件ID使用

    2.在Zscrip定义变量

    3.隐式对象

    <window title="EL">
        <textbox id="tb" value="${self.parent.title}"/> <!-- self 引用自身的隐式对象   -->
        ${tb.value} <!-- tb 是textbox的ID -->
        <button label="Enter" if="${not empty param.edit}"/>
        <zscript>Date now = new Date();</zscript>
        <datebox value="${now}"/> <!-- now 是在定义在 zscript -->
    </window>
    此外,您可以定义一个变量解析器(variable resolver) 结合一个对象的命名或者映射一个静态方法函数
    @.variable Resolver
    package foo;
    public class CustomerResolver implements org.zkoss.xel.VariableResolver {
        public Object resolveVariable(String name) {
            if ("customers".equals(name))
                return Customer.getAll("*");
    //     if ("recent".equals(name))
    //         return something_else;
            return null; //not a recognized variable
        }
    }

    然后、你可以指定variable-resolver指令,如:

    <?variable-resolver class="foo.CustomerResolve"?> 
    <listbox>
        <listitem label="${each.name}" forEach="${customers}"/>
    </listbox>
    @关联java方法
    集合对象可以通过调用一个静态方法得到值。例如,假设我们有一个类和静态的方法如下
    package foo;
    public class Customer {
        public Collection<Customer> getAll(String condition) {
            //...returns a collection of customers
        }
        public String getName() {
           return _name;
        }
        //...
    }

    然后,我们通过xel-method指令来获取他们:

    <?xel-method prefix="c" name="getAllCustomers" class="foo.Customer"
       signature="java.util.Collection getAll(java.lang.String)"?><!-- 不允许泛型-->
    <listbox>
        <listitem label="${each.name}" forEach="${c:getAllCustomers('*')}"/>
    </listbox>
    @关联多个java方法 
    如果有多个静态方法,你把它们声明在一个xml格式的taglib文件中如:
    <taglib>
        <function>
            <name>getAllCustomers</name>
            <function-class>foo.Customer</function-class>
            <function-signature>
        java.util.Collection getAll(java.lang.String)
            </function-signature>
            <description>
        Returns a collection of customers.
            </description>
        </function>
        <!-- any number of functions are allowed -->
    </taglib>
    然后,你可以指定taglib指令使用它们了
    <?taglib uri="/WEB-INF/tld/my.tld" prefix="my"?>
    <listbox>
        <listitem label="${each.name}" forEach="${my:getAllCustomers('*')}"/>
    </listbox>
  • 相关阅读:
    在宝塔中升级mysql版本
    测试winform程序到树莓派运行
    winserver2012远程桌面进入只有CMD窗口,无桌面解决方法
    一七年春末
    Linux 上通过rpm安装mysql
    Linux 上关于iptables
    Linux环境下安装JDK
    Linux上安装tomcat
    Linux 下安装redis
    Map集合按照value和key进行排序
  • 原文地址:https://www.cnblogs.com/xiaopen/p/zk_EL.html
Copyright © 2011-2022 走看看