|
2004-3-14
用JavaServer Faces开发Web应用(4)
6、事件处理。 下一步就是写事件处理器程序用来响应组件事件(诸如,选择了一个多选的选项或者点击一个按钮提交一个表单等等)。对于简单的应用,你还需指明当一个表单被提交或者访问一个超级连接时,哪一个页面会被访问。你可以实现ApplicationHandler 这个接口达到这个目的。下面的代码段显示了一个例子。这个例子中,我要看看FormEvent是不是index.jsp中Submit按钮触发的。如果是, 组件树ID就会设置为与index.jsp页面相关联的组件树的ID。 代码5: BasicApplicationHandler.java import java.util.SortedMap; import javax.faces.FacesException; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.tree.Tree; import javax.faces.tree.TreeFactory; import javax.faces.FactoryFinder; import javax.faces.lifecycle.ApplicationHandler; import javax.faces.event.FormEvent; import javax.faces.event.FacesEvent; import javax.faces.event.CommandEvent; import com.sun.faces.RIConstants; public class BasicApplicationHandler implements ApplicationHandler{ public boolean processEvent(FacesContext context, FacesEvent facesEvent) { if (!(facesEvent instanceof FormEvent) && !(facesEvent instanceof CommandEvent)) { return true; } boolean returnValue = false; String treeId = null; if (facesEvent instanceof FormEvent) { FormEvent formEvent = (FormEvent) facesEvent; if (formEvent.getCommandName().equals("submit")) { treeId = "/hello.jsp"; } returnValue = true; } else if (facesEvent instanceof CommandEvent) { CommandEvent commandEvent = (CommandEvent)facesEvent; UIComponent c = commandEvent.getComponent(); if (c.getAttribute("target") != null) { treeId = (String)c.getAttribute("target"); returnValue = true; } } if (null != treeId) { TreeFactory treeFactory = (TreeFactory) FactoryFinder.getFactory(FactoryFinder.TREE_FACTORY); context.setTree(treeFactory.getTree(context,treeId)); } return returnValue; } }
7、开发上下文监听程序。 如果你仔细看过部署描述文件web.xml,你会注意我声明了一个servlet上下文监听程序(BasicServletContextListener)。当应用启动时,servlet容器会创建一个servlet context listener的实例,并调用它的contextInitialized 方法;当应用关闭的时候,会调用它的contextDestroyed 方法。下面是一个servlet context listener的例子。 代码6: BasicServletContextListener.java import javax.servlet.ServletContextListener; import javax.servlet.ServletContextEvent; import javax.faces.FactoryFinder; import javax.faces.lifecycle.LifecycleFactory; import javax.faces.lifecycle.Lifecycle; import javax.faces.lifecycle.ApplicationHandler; public class BasicServletContextListener implements ServletContextListener { public BasicServletContextListener() { } public void contextInitialized(ServletContextEvent e) { ApplicationHandler handler = new BasicApplicationHandler(); LifecycleFactory factory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); Lifecycle lifecycle = factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); lifecycle.setApplicationHandler(handler); } public void contextDestroyed(ServletContextEvent e){ } }
8、完成响应页面。 当index.jsp中的表单被提交后,应用处理器程序启动,然后用户会被转发到响应页面hello.jsp。代码如下: Code Sample 7: hello.jsp <HTML> <HEAD> <title>Hello</title> </HEAD> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <body bgcolor="white"> <f:use_faces> <h:form id="responseform" formName="responseform"> <h2>Hello, <h:output_text id="userLabel" modelReference="UserNameBean.userName" /> </h2> <p> </h:form> </f:use_faces> </HTML>
<未完待续> 其余部分请参考: http://www.csdn.net/develop/read_article.asp?id=18705 用JavaServer Faces开发Web应用(1) http://www.csdn.net/develop/read_article.asp?id=18707 用JavaServer Faces开发Web应用(2) http://www.csdn.net/develop/read_article.asp?id=18709 用JavaServer Faces开发Web应用(3) http://www.csdn.net/develop/read_article.asp?id=18712 用JavaServer Faces开发Web应用(5) 热门文章
推荐信息
|