Create composite component in JSF2

来源:互联网 发布:unity3d破解版下载 编辑:程序博客网 时间:2024/05/16 00:44

最近在做一个J2EE框架,把一些心得记录下来。下面的例子是框架中messages component的做法,包含了几个技术点,组件中怎么加载css文件,在css中怎么加载图片。记住一点在resources文件下的所有文件夹在JSF2中默认是库名称,如果子文件夹下还有子文件夹,加载资源的时候可以如下写,都是正确的。

<h:outputStylesheet library="commons" name="css/component.common.css" target="head"/> or

<h:outputStylesheet library="commons/css" name="component.common.css" target="head"/>

步骤:

1. 开发环境:

eclipse3.7 + maven3 + jboss7.1 + h2 database

2.技术框架:

JSF2.0 + richface4.0 + EJB3.1 + CDI1.0 + JPA2.0(hibernate实现)

3.pom.xml配置:

     <dependency>
         <groupId>javax.enterprise</groupId>
         <artifactId>cdi-api</artifactId>
         <scope>provided</scope>
      </dependency>
      <dependency>
         <groupId>org.jboss.spec.javax.annotation</groupId>
         <artifactId>jboss-annotations-api_1.1_spec</artifactId>
         <scope>provided</scope>
      </dependency>
      <dependency>
         <groupId>org.jboss.spec.javax.faces</groupId>
         <artifactId>jboss-jsf-api_2.0_spec</artifactId>
         <scope>provided</scope>
      </dependency>
      <dependency>
         <groupId>org.hibernate.javax.persistence</groupId>
         <artifactId>hibernate-jpa-2.0-api</artifactId>
         <scope>provided</scope>
      </dependency>
      <dependency>
         <groupId>org.jboss.spec.javax.transaction</groupId>
         <artifactId>jboss-transaction-api_1.1_spec</artifactId>
         <scope>provided</scope>
      </dependency>
      <dependency>
         <groupId>org.jboss.spec.javax.ejb</groupId>
         <artifactId>jboss-ejb-api_3.1_spec</artifactId>
         <scope>provided</scope>
      </dependency>

      <dependency>
         <groupId>org.richfaces.ui</groupId>
         <artifactId>richfaces-components-ui</artifactId>
         <version>4.2.1.CR1</version>
        </dependency>
        <dependency>
         <groupId>org.richfaces.core</groupId>
         <artifactId>richfaces-core-impl</artifactId>
         <version>4.2.1.CR1</version>
        </dependency> 

4. 创建resources文件夹在META-INF下,在resources文件夹下的任何文件夹都是库名称,如commons就是库名称,在taglib.xml中必须一致。

   路径:META-INF\resources\commons

5. 创建taglib.xml 在META-INF下. namespace是自己定义的,在调用的时候用。

    <?xml version="1.0"?>
    <facelet-taglib version="2.0"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd">

    <namespace>http://test.com.cn/test/taglib/commons</namespace>
       <composite-library-name>commons</composite-library-name>
    </facelet-taglib>

6. 创建faces-config.xml在META-INF下.

<?xml version="1.0"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
            http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
        version="2.0">

</faces-config>

7.下面是在commons文件夹下的messages.xhtml

<?xml version="1.0" encoding="utf-8"?>

<ui:composition
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:a4j="http://richfaces.org/a4j"
  xmlns:composite="http://java.sun.com/jsf/composite">
  <composite:interface>
       <composite:attribute name="style" default="" required="false"/>
  </composite:interface>
  <composite:implementation>
   <h:outputStylesheet library="commons" name="css/component.common.css" target="head"/>
      <a4j:outputPanel ajaxRendered="true" layout="block">
  
     <h:panelGroup layout="block" rendered="#{not empty facesContext.maximumSeverity}" style="#{cc.attrs.style}" styleClass="faces-padding-div">
       <div class="faces-msg-box">
          <h:messages errorClass="faces-msg-error" fatalClass="faces-msg-fatal" infoClass="faces-msg-info" warnClass="faces-msg-warn" />
       </div>
     </h:panelGroup>
   </a4j:outputPanel>
  </composite:implementation>
</ui:composition>

.8. component.common.css的路径是resources/commons/css/component.common.css.

   图片路径是resources/commons/images.

 css内容如下:

.faces-msg-error {
    background: #ffffdc url(#{resource['commons:images/msg-error.gif']}) no-repeat scroll 0%;
    color: #f00;
}

.faces-msg-fatal {
    background: #ffffdc url(#{resource['commons:images/msg-fatal.gif']}) no-repeat scroll 0%;
    color: #f00;
}

.faces-msg-info {
    background: #ffffdc url(#{resource['commons:images/msg-info.gif']}) no-repeat scroll 0%;
    color: #15428b;
}

.faces-msg-warn {
    background: #ffffdc url(#{resource['commons:images/msg-warn.gif']}) no-repeat scroll 0%;
    color: #7b5113;
}

.faces-msg-box {
    background-color: #ffffdc;
    padding: 3px;
    border: solid 1px #BED6F8;
    margin:0px;
}

9.调用方式:

xmlns:test="http://test.com.cn/test/taglib/commons"
 

<test:messages/>

 

 

原创粉丝点击