一、与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>