用JavaServer Faces开发Web应用(4)

来源:互联网 发布:网络犯罪有哪些 编辑:程序博客网 时间:2024/05/22 16:53
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

    6、事件处理。

 

下一步就是写事件处理器程序用来响应组件事件(诸如,选择了一个多选的选项或者点击一个按钮提交一个表单等等)。对于简单的应用,你还需指明当一个表单被提交或者访问一个超级连接时,哪一个页面会被访问。你可以实现ApplicationHandler 这个接口达到这个目的。下面的代码段显示了一个例子。这个例子中,我要看看FormEvent是不是index.jspSubmit按钮触发的。如果是, 组件树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)

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>