• 欢迎访问ByWei.Cn,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,加入百味博客 软件定制QQ群
  • 已升级为最新版主题,并将持续优化改造中,支持说说碎语功能,可像添加文章一样直接添加说说,博客主题升级啦
  • 感谢您百度求点赞啊!百度网址
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏百味博客吧
  • 博主热烈欢迎 软件定制开发 联系:http://www.bywei.cn

ZK EL表达式

编程语言 百味博客 13年前 (2011-05-24) 1566次浏览 0个评论 扫描二维码

ZK EL表达式

一、zk EL表达式与Java的EL一些区别

1.字符串可以使用单引号或双引号括起来。如:’abc’和”abc”是相同的,在使用引入时,可以对立使用,如在外包含使用了单引号,内层的就可以使用双引号,反之依然。

2.使用关键字empty可以验证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表达式求值时,在服务器的页面呈现,然后返回html页面

1.可以用zk组件ID使用

2.在zk标签<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> <!–zk Script中可以定义java 方法–>
    <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>


百味博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ZK EL表达式
喜欢 (6)
[微信扫一扫]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址