技术开发 频道

在Java EE 6中使用JSF 2.0简化页面制作

  为了让混合组件可用,将代码保存为XHTML文件,将文件放到应用程序根目录下resources目录的子目录中即可。子目录的名字可以采用包含混合组件的资源库名字,JSF运行时通过向混合组件的标签名后追加.xhtml后缀查找混合组件。例如,如果你将标签命名为loginPanel,那么保存为混合组件的文件名就是loginPanel.xhtml。然后你就可以在Web页面中使用混合组件了,下面就是一个使用混合组件的Web页面代码示例:

<!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:h=http://java.sun.com/jsf/html
       xmlns:f="http://java.sun.com/jsf/core" 
      xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:ez="http://java.sun.com/jsf/composite/ezcomp"> 
    <head> 
   <title>Example 01>/title>
    <style type="text/css"> 
   .grayBox { padding: 8px; margin: 10px 0; border: 1px solid #CCC; background-color: #f9f9f9;
  
}
    
</style>
    
</h:head>
    
<h:body>
      
<p>Usage of Login Panel Component</p>
          
<ui:debug hotkey="p" rendered="true"/>
      
<h:form>
          
<div id="compositeComponent" class="grayBox" style="border: 1px solid #090;">
            
<ez:loginPanel> 
                <f:actionListener for="loginEvent" type="example01.LoginActionListener" /> 
             </ez:loginPanel>
          
</div>
      
<p><h:commandButton value="reload" /></p>
      
<p><h:outputText value="#{loginActionMessage}" /></p>
      
</h:form>
    
</h:body>
    
</html>

  注意声明xmlns:ez="http://java.sun.com/jsf/composite/ezcomp",它指定了混合组件的命名空间和前缀,这里的ezcomp是资源目录的子目录名,JSF使用下面的约定:所有命名空间URI都以http://java.sun.com/jsf/composite/开头,使用资源库的名称结束。

  <f:actionListener> 

  标签关联混合组件的行为监听器,标签中的for属性表示这个监听器是为混合组件上名为loginEvent行为事件准备的,你需要编写代码来处理事件,例如:

import javax.faces.component.UIComponent;
  
import javax.faces.component.ValueHolder;
  
import javax.faces.context.FacesContext;
   import javax.faces.event.AbortProcessingException;  
   import javax.faces.event.ActionEvent;
  
import javax.faces.event.ActionListener;
    public class LoginActionListener implements ActionListener {
        
public void processAction(ActionEvent event) throws AbortProcessingException {
           FacesContext context
= FacesContext.getCurrentInstance();
           context.getExternalContext().getRequestMap().put(
"loginActionMessage",
                  
"Login event happened");
       }
   }  
0
相关文章