用JavaServer Faces開發Web應用(4) (轉)

amyz發表於2007-08-15
用JavaServer Faces開發Web應用(4) (轉)[@more@]

  6、事件處理。

:namespace prefix = o ns = "urn:schemas--com::office" /> 

下一步就是寫事件用來響應事件(諸如,選擇了一個多選的選項或者點選一個按鈕提交一個表單等等)。對於簡單的應用,你還需指明當一個表單被提交或者訪問一個超級連線時,哪一個頁面會被訪問。你可以實現ApplicationHandler 這個介面達到這個目的。下面的程式碼段顯示了一個例子。這個例子中,我要看看FormEvent是不是index.中Submit按鈕觸發的。如果是, 元件樹ID就會設定為與index.jsp頁面相關聯的元件樹的ID。

 

程式碼5 BasicApplicationHandler.

 

import java.util.SortedMap;

import javax.faces.FacesException;

import javax.faces.component.UIComponent;

import javax.faces.context.Facentext;

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、開發上下文程式。

 

如果你仔細看過部署描述.xml,你會注意我宣告瞭一個上下文監聽程式(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

 

 

Hello

 

 

 

 

 

 

Hello,

    modelReference="UserNameBean.userName" />

 

 

 

 

 

其餘部分請參考:

/develop/read_article.?id=18705">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)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958205/,如需轉載,請註明出處,否則將追究法律責任。

相關文章