欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSF页面组件化

程序员文章站 2022-05-18 23:16:29
页面化能带来很多优点,当多个页面引用同一个页面,这样,我们就只需要维护一个页面的代码,大大减轻开发人员的工作量。 假设网站的根目录为jsfapp,建立jsfapp/resources/echo目录,...

页面化能带来很多优点,当多个页面引用同一个页面,这样,我们就只需要维护一个页面的代码,大大减轻开发人员的工作量。

假设网站的根目录为jsfapp,建立jsfapp/resources/echo目录,resources为默认的需要组件化的页面的根目录,echo为组件的前缀。

第一步
新增jsfapp/resources/echo/echoinputtext.xhtml文件,内容如下:

[html] 】
<?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" 
    xmlns:c="http://java.sun.com//jstl/core" 
    <strong>xmlns:composite="http://java.sun.com/jsf/composite"</strong>> 
<h:head> 
    <title>myjsf</title> 
    <meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
</h:head> 
    <!--  interface  --> 
    <composite:interface> 
        <composite:attribute name="echo" /> 
    </composite:interface> 
     
    <!--  implementation  --> 
    <composite:implementation> 
        <p style="padding: 20px;"> 
            <span>请输入响应文字:</span> 
            <h:inputtext value="#{cc.attrs.echo.echotext}"></h:inputtext> 
        </p> 
    </composite:implementation> 
</html> 

<?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"
 xmlns:c="http://java.sun.com/jsp/jstl/core"
 xmlns:composite="http://java.sun.com/jsf/composite">
<h:head>
 <title>myjsf</title>
 <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</h:head>
 <!--  interface  -->
 <composite:interface>
  <composite:attribute name="echo" />
 </composite:interface>
 
 <!--  implementation  -->
 <composite:implementation>
  <p style="padding: 20px;">
   <span>请输入响应文字:</span>
   <h:inputtext value="#{cc.attrs.echo.echotext}"></h:inputtext>
  </p>
 </composite:implementation>
</html>注意[html] view plaincopyprint?<strong>xmlns:composite="http://java.sun.com/jsf/composite"</strong

xmlns:composite=""声明页面组件必须用到composite名字空间。


[html]
<composite:interface> 

<composite:interface>传入的参数。


[html]
<composite:implementation> 

<composite:implementation>真正组件中的内容。


第二步
新增jsfapp/echo2.xhtml文件:
[html]
<?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="" 
    xmlns:ui="" 
    xmlns:h="" 
    xmlns:f="" 
    xmlns:c="" 
    xmlns:echo=""> 
<h:head> 
    <title>myjsf</title> 
    <meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
</h:head> 
<body> 
    <p id="header" 
        style="padding: 100px 0 20px 100px; font-size: 22px; font-weight: bold; border-bottom: solid 1px red"> 
        这个应声器的作者是:#{inputecho.encoder.author}。</p> 
    <p> 
        <h:form id="form" style="padding:20px  0  20px  100px"> 
            <echo:echoinputtext echo="#{inputecho}"></echo:echoinputtext> 
            <p style="padding-left: 50px"> 
                <h:commandbutton id="post" style="padding:3px;width:100px;" 
                    value="提交响应" action="echo2" /> 
            </p> 
        </h:form> 
    </p> 
    <h:panelgroup id="after"> 
        <p style="padding: 20px 0 0 100px"> 
            响应: 
            <h:outputtext id="echo" value="#{inputecho.outtext}" escape="false"></h:outputtext> 
        </p> 
    </h:panelgroup> 
</body> 
</html> 

<?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=""
 xmlns:ui=""
 xmlns:h=""
 xmlns:f=""
 xmlns:c=""
 xmlns:echo="">
<h:head>
 <title>myjsf</title>
 <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</h:head>
<body>
 <p id="header"
  style="padding: 100px 0 20px 100px; font-size: 22px; font-weight: bold; border-bottom: solid 1px red">
  这个应声器的作者是:#{inputecho.encoder.author}。</p>
 <p>
  <h:form id="form" style="padding:20px  0  20px  100px">
   <echo:echoinputtext echo="#{inputecho}"></echo:echoinputtext>
   <p style="padding-left: 50px">
    <h:commandbutton id="post" style="padding:3px;width:100px;"
     value="提交响应" action="echo2" />
   </p>
  </h:form>
 </p>
 <h:panelgroup id="after">
  <p style="padding: 20px 0 0 100px">
   响应:
   <h:outputtext id="echo" value="#{inputecho.outtext}" escape="false"></h:outputtext>
  </p>
 </h:panelgroup>
</body>
</html>

使用echo前缀
[html]
xmlns:echo="http://java.sun.com/jsf/composite/echo" 

xmlns:echo="http://java.sun.com/jsf/composite/echo"

使用echoinputtext页面,并传入echo参数
[html]
<echo:echoinputtext echo="#{inputecho}"></echo:echoinputtext> 

<echo:echoinputtext echo="#{inputecho}"></echo:echoinputtext>

bean及工具类如下:
[java]
@managedbean(name="inputecho")  
@sessionscoped 
public class inputecho implements serializable { 
    /**
     * 
     */ 
    private static final long serialversionuid = 7599540489637124942l; 
     
    private  string  echotext = ""; 
    private  echoencoder  encoder; 
      
    public  inputecho()  {  
        encoder  =  new  echoencoder();  
    }  
 
    /** 
      *  @return  the  encoder 
      */  
    public  echoencoder  getencoder()  {  
        return  encoder;  
    }  
 
    /** 
      *  @return  the  echotext 
      */  
    public  string  getechotext()  {  
        return  echotext;  
    }  
      
    public  string  getouttext()  {  
        return  encoder.encode(echotext);  
    }  
 
    /** 
      *  @param  echotext  the  echotext  to  set 
      */  
    public  void  setechotext(string  echotext)  {  
        this.echotext  =  echotext;  
    }  
      
    public  void  echo()  {  
    } 

@managedbean(name="inputecho")
@sessionscoped
public class inputecho implements serializable {
 /**
  *
  */
 private static final long serialversionuid = 7599540489637124942l;
 
 private  string  echotext = "";
    private  echoencoder  encoder;
    
    public  inputecho()  {
        encoder  =  new  echoencoder();
    }

    /**
      *  @return  the  encoder
      */
    public  echoencoder  getencoder()  {
        return  encoder;
    }

    /**
      *  @return  the  echotext
      */
    public  string  getechotext()  {
        return  echotext;
    }
    
    public  string  getouttext()  {
        return  encoder.encode(echotext);
    }

    /**
      *  @param  echotext  the  echotext  to  set
      */
    public  void  setechotext(string  echotext)  {
        this.echotext  =  echotext;
    }
    
    public  void  echo()  {
    }
}
[java]
package com.zolcorp.myjsf.bean; 
 
import java.io.serializable; 
 
public class echoencoder implements serializable { 
 
    /**
     * 
     */ 
    private static final long serialversionuid = -5578888194809870790l; 
     
    private string author = "pout"; 
     
    /** 
      * @return the author
      */  
    public string getauthor() {  
        return author;  
    }  
 
    public string encode(string msg) { 
        if(msg == null) 
            return null; 
        return msg.replaceall("<", "<").replaceall(">", ">").replaceall("\n", "<br/>");  
    } 

package com.zolcorp.myjsf.bean;

import java.io.serializable;

public class echoencoder implements serializable {

 /**
  *
  */
 private static final long serialversionuid = -5578888194809870790l;
 
 private string author = "pout";
   
    /**
      * @return the author
      */
    public string getauthor() {
        return author;
    }

    public string encode(string msg) {
     if(msg == null)
      return null;
        return msg.replaceall("<", "<").replaceall(">", ">").replaceall("\n", "<br/>");
    }
}

页面组件化能大大减少维护的工作量。jsf2里配置也很简单。