JSF2支持AJAX,我们将使用AJAX从数据库获取数据,并实现页面局部刷新。
1. 新建一个页面,继承模板。
list.xhtml内容如下:
这里使用了f:ajax,其中
(1)event:触发事件,这里使用了onkeyup。
(2)render:指向要局部刷新的组件,这里指向id=custTable的组件。
(3)listener:触发事件触发的方法,该方法只有一个参数,类型为AjaxBehaviorEvent,没有返回值。
2. 新建一个Managed Bean:CustomerName。
说明:@Model标注是CDI规范中的,它相当于加了两个标注:@Named和@RequestScoped。
现在,CustomerName可以在Express Language中引用。
3. 在CustomerSessionBean中增加一个方法matchCustomers。
4. 运行list.xhtml。
输入查询条件,比如a,当按键抬起时,触发AJAX,调用Listener方法,查询结果如下:
1. 新建一个页面,继承模板。
list.xhtml内容如下:
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <body> <ui:composition template="./WEB-INF/template.xhtml"> <ui:define name="content"> <h:form> <h:inputText value="#{customerName.value}"> <f:ajax event="keyup" render="custTable" listener="#{customerSessionBean.matchCustomers}"/> </h:inputText> <h:dataTable var="c" value="#{customerSessionBean.cust}" id="custTable"> <h:column>#{c}</h:column> </h:dataTable> </h:form> </ui:define> </ui:composition> </body> </html>
这里使用了f:ajax,其中
(1)event:触发事件,这里使用了onkeyup。
(2)render:指向要局部刷新的组件,这里指向id=custTable的组件。
(3)listener:触发事件触发的方法,该方法只有一个参数,类型为AjaxBehaviorEvent,没有返回值。
2. 新建一个Managed Bean:CustomerName。
@Model public class CustomerName { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
说明:@Model标注是CDI规范中的,它相当于加了两个标注:@Named和@RequestScoped。
现在,CustomerName可以在Express Language中引用。
3. 在CustomerSessionBean中增加一个方法matchCustomers。
public void matchCustomers(AjaxBehaviorEvent evt) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery criteria = builder.createQuery(Customer.class); // FROM clause Root root = criteria.from(Customer.class); // SELECT clause criteria.select(root); // WHERE clause Predicate condition = builder.like(root.get(Customer_.name), "%" + name.getValue() + "%"); criteria.where(condition); // FIRE query TypedQuery query = em.createQuery(criteria); // PRINT result cust = query.getResultList(); return; }
4. 运行list.xhtml。
输入查询条件,比如a,当按键抬起时,触发AJAX,调用Listener方法,查询结果如下:
没有评论:
发表评论