`
xiaofengtoo
  • 浏览: 485195 次
  • 性别: Icon_minigender_1
  • 来自: xiamen
社区版块
存档分类
最新评论

Spring2.5和ICEFaces开发Java EE

阅读更多
ICEFaces是JSF组件的一个类库,并在此基础上添加了对AJAX特有的处理方法:在Server端绑定了DOM,并且通过AJAX的推技术将Server端上的改变传递给client。这就意味着Server端在与各种各样的后端数据服务交互后,获得表示层应如何变化的信息,利用推技术,立即可以异步发送动态数据给用户界面,而不需用户的介入。


ICEFaces组件套装相当完整,包括将普通JSF的组件改造成支持AJAX的一些特性。比如说,JSF里绑定HTML标签<input type=”text”/>的inputText组件,通过ICEFaces现在可被感知,将所输入的数据“局部”提交。server得到的是刚才所输入的那小部分数据,而不再需要等到整个页面都提交完了再处理。


ICEFaces组件套装也包括styling, a menu bar, a connection status widget, effects (也就是highlights, pulses, fades), a progress bar, a file upload widget, charts, and a capable set of panels.


尽管价格不菲,但因此JavaEE本身对以上提及的组件支持就不完备,用ICEFaces和JSF1.2来开发也算是弥补了JSF的不足。现在我们就来看看ICEFaces如何布署在JavaEE容器,如何在EJB3下轻松的进行开发和配置,甚至不需要EJB3。


ICEFaces的1.6,1.7版本仍然要使用先前的JavaEE规范,也就是说需要使用Servlet2.4,而不是2.5。按照JavaEE规范来说, Servlet2.4除了不能注入资源外,区别不大。但这也意味着Servlet2.4下访问EJB只能用以前的老办法了,无法享受通过注入带来的好处。


以下是在Servlet2.5下,使用Stateless Session EJB的实例:

MyManagedBean.java:
Java代码 复制代码
   import com.tss.ejb.SLSBLocal;   
  
   public class MyManagedBean {   
     @EJB  
     SLSBLocal slsblocal;   
     public String getValueFromEJB() {   
         return slsblocal.getValue();   
     }   
 }  

import com.tss.ejb.SLSBLocal;

public class MyManagedBean {
	@EJB
	SLSBLocal slsblocal;
	public String getValueFromEJB() {
		return slsblocal.getValue();
	}
}





在Servlet2.4下,annotation会被忽略掉。这的确很闹心,但也不是没有办法。这个时候Spring就可以在没有任何EJB的情况下,帮助我们管理


首先,我们建立一个web.xml来配置ICEFaces,同时建立的Web应用程序JSF必须是1.2版本。请看下面建好后的web.xml:
web.xml:
Xml代码 复制代码
    <?xml version="1.0" encoding="UTF-8"?>  
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"  
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"  
             version="2.4">  
        <servlet>  
            <servlet-name>Faces Servlet</servlet-name>  
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>  
            <load-on-startup>1</load-on-startup>  
       </servlet>  
     
       <servlet>  
           <servlet-name>Persistent Faces Servlet</servlet-name>  
           <servlet-class>com.icesoft.faces.webapp.xmlhttp.PersistentFacesServlet</servlet-class>  
           <load-on-startup>1</load-on-startup>  
       </servlet>  
     
       <servlet>  
           <servlet-name>Blocking Servlet</servlet-name>  
           <servlet-class>com.icesoft.faces.webapp.xmlhttp.BlockingServlet</servlet-class>  
           <load-on-startup>1</load-on-startup>  
       </servlet>  
     
       <servlet-mapping>  
           <servlet-name>Faces Servlet</servlet-name>  
           <url-pattern>*.jspx</url-pattern>  
       </servlet-mapping>  
     
       <servlet-mapping>  
           <servlet-name>Persistent Faces Servlet</servlet-name>  
           <url-pattern>*.iface</url-pattern>  
       </servlet-mapping>  
     
       <servlet-mapping>  
           <servlet-name>Persistent Faces Servlet</servlet-name>  
           <url-pattern>/xmlhttp/*</url-pattern>  
       </servlet-mapping>  
     
       <servlet-mapping>  
           <servlet-name>Blocking Servlet</servlet-name>  
           <url-pattern>/block/*</url-pattern>  
       </servlet-mapping>  
     
       <servlet-mapping>  
           <servlet-name>Faces Servlet</servlet-name>  
           <url-pattern>/faces/*</url-pattern>  
       </servlet-mapping>  
     
       <servlet-mapping>  
           <servlet-name>Faces Servlet</servlet-name>  
           <url-pattern>*.faces</url-pattern>  
       </servlet-mapping>  
     
       <listener>  
           <listener-class>  
           com.icesoft.faces.util.event.servlet.ContextEventRepeater   
       </listener-class>  
       </listener>  
   </web-app>  

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>Persistent Faces Servlet</servlet-name>
        <servlet-class>com.icesoft.faces.webapp.xmlhttp.PersistentFacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>Blocking Servlet</servlet-name>
        <servlet-class>com.icesoft.faces.webapp.xmlhttp.BlockingServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>Persistent Faces Servlet</servlet-name>
        <url-pattern>*.iface</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>Persistent Faces Servlet</servlet-name>
        <url-pattern>/xmlhttp/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>Blocking Servlet</servlet-name>
        <url-pattern>/block/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
    </servlet-mapping>

    <listener>
        <listener-class>
		com.icesoft.faces.util.event.servlet.ContextEventRepeater
	</listener-class>
    </listener>
</web-app>
 


现在我们还需要建立一个不断更新DOM的Bean。在这个例子中,我们使用了一个outputText来显示时钟(通过java.util.Date来实现),用另一个outputText来显示刷新的次数。更多详细内容可以在ICEFaces开发指南中找到,以下是faces-config.xml和TimeBean.java的源文件:


faces-config.xml:
Xml代码 复制代码
    <?xml version='1.0' encoding='UTF-8'?>  
    <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_1_2.xsd"  
                  version="1.2">  
      
        <managed-bean>  
            <managed-bean-name>renderManager</managed-bean-name>  
            <managed-bean-class>com.icesoft.faces.async.render.RenderManager</managed-bean-class>  
           <managed-bean-scope>application</managed-bean-scope>  
       </managed-bean>  
     
       <managed-bean>  
           <managed-bean-name>timebean</managed-bean-name>  
           <managed-bean-class>com.tss.beans.TimeBean</managed-bean-class>  
           <managed-bean-scope>request</managed-bean-scope>  
           <managed-property>  
               <property-name>renderManager</property-name>  
               <value>#{renderManager}</value>  
           </managed-property>  
       </managed-bean>  
     
   </faces-config>  

<?xml version='1.0' encoding='UTF-8'?>
<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_1_2.xsd"
              version="1.2">

    <managed-bean>
        <managed-bean-name>renderManager</managed-bean-name>
        <managed-bean-class>com.icesoft.faces.async.render.RenderManager</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
    </managed-bean>

    <managed-bean>
        <managed-bean-name>timebean</managed-bean-name>
        <managed-bean-class>com.tss.beans.TimeBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>renderManager</property-name>
            <value>#{renderManager}</value>
        </managed-property>
    </managed-bean>

</faces-config>

 


TimeBean.java:

Java代码 复制代码
    package com.tss.beans;   
      
    import com.icesoft.faces.async.render.IntervalRenderer;   
    import com.icesoft.faces.async.render.RenderManager;   
    import com.icesoft.faces.async.render.Renderable;   
    import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;   
    import com.icesoft.faces.webapp.xmlhttp.RenderingException;   
      
    import java.util.Date;   
     
   public class TimeBean implements Renderable {   
       static int refreshCount = 0;   
       int interval = 1000;   
       PersistentFacesState state;   
       IntervalRenderer clock;   
     
       public TimeBean() {   
           init();   
       }   
     
       private void init() {   
           state = PersistentFacesState.getInstance();   
       }   
     
       public int getRefreshCount() {   
           return refreshCount;   
       }   
     
       public void setRefreshCount(int refreshCount) {   
           this.refreshCount = refreshCount;   
       }   
     
       public Date getNow() {   
           return new Date();   
       }   
     
       public String refresh() {   
           refreshCount++;   
           return null;   
       }   
     
       public void setRenderManager(RenderManager renderManager) {   
           clock = renderManager.getIntervalRenderer("clock");   
           clock.setInterval(interval);   
           clock.add(this);   
           clock.requestRender();   
       }   
     
       public PersistentFacesState getState() {   
           return state;   
       }   
     
       public void renderingException(RenderingException renderingException) {   
           if (clock != null) {   
               clock.remove(this);   
               clock = null;   
           }   
       }   
   }  

package com.tss.beans;

import com.icesoft.faces.async.render.IntervalRenderer;
import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;

import java.util.Date;

public class TimeBean implements Renderable {
    static int refreshCount = 0;
    int interval = 1000;
    PersistentFacesState state;
    IntervalRenderer clock;

    public TimeBean() {
        init();
    }

    private void init() {
        state = PersistentFacesState.getInstance();
    }

    public int getRefreshCount() {
        return refreshCount;
    }

    public void setRefreshCount(int refreshCount) {
        this.refreshCount = refreshCount;
    }

    public Date getNow() {
        return new Date();
    }

    public String refresh() {
        refreshCount++;
        return null;
    }

    public void setRenderManager(RenderManager renderManager) {
        clock = renderManager.getIntervalRenderer("clock");
        clock.setInterval(interval);
        clock.add(this);
        clock.requestRender();
    }

    public PersistentFacesState getState() {
        return state;
    }

    public void renderingException(RenderingException renderingException) {
        if (clock != null) {
            clock.remove(this);
            clock = null;
        }
    }
}

 



最后,我们建立一个example.jsp页面,调用的时候名字叫“example.iface”

example.jsp:
Html代码 复制代码
    <!DOCTYPE html   
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>  
    <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>  
    <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>  
    <%@ taglib prefix="ice" uri="http://www.icesoft.com/<SPAN class=hilite1>icefaces</SPAN>" %>  
    <%@ taglib prefix="comp" uri="http://www.icesoft.com/<SPAN class=hilite1>icefaces</SPAN>/component" %>  
    <f:view>  
       <html>  
       <head>  
           <title><SPAN class=hilite1>ICEFaces</SPAN> Example</title>  
       </head>  
       <body>  
       <h:form>  
           <comp:outputConnectionStatus/><br/>  
           Time: <comp:outputText value="#{timebean.now}"/><br/>  
           Refresh Count: <comp:outputText value="#{timebean.refreshCount}"/><br/>  
           <comp:commandLink value="Refresh" action="#{timebean.refresh}"/>  
       </h:form>  
       </body>  
       </html>  
   </f:view>  

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="ice" uri="http://www.icesoft.com/icefaces" %>
<%@ taglib prefix="comp" uri="http://www.icesoft.com/icefaces/component" %>
<f:view>
    <html>
    <head>
        <title>ICEFaces Example</title>
    </head>
    <body>
    <h:form>
        <comp:outputConnectionStatus/><br/>
        Time: <comp:outputText value="#{timebean.now}"/><br/>
        Refresh Count: <comp:outputText value="#{timebean.refreshCount}"/><br/>
        <comp:commandLink value="Refresh" action="#{timebean.refresh}"/>
    </h:form>
    </body>
    </html>
</f:view>

 




现在,将此应用程序发布在应用服务器里,然后打开两个session(假定一个是 IE,一个是FireFox) 都去访问该页面,你会看到两个浏览器上面都会显示一个时钟。这个时候,如果有一方单击了那个“Refresh”超连接,两个浏览器窗口都会被刷新。


这就是在server端使用AJAX的推技术来传递DOM的更新。微小的DOM更新,造成的带宽消耗一般是不要考虑的,但请记住带宽不并总是富足的,你仍然有必要去测量网络流量有没有超过你的限制。


现在的问题是直接使用的Servlet规范是2.4。如果使用EJB3的语法来构造是有问题的。而EJB2又是一个“又糟糕又过时的东西”,不得不要求使用remote和home接口。这个时候如果使用Spring的话,仅仅多一些配置就几乎可以给你提供所有你想要的东西。


因此我们不再需要像EJB这样的组件了,甚至在没有使用它的情况下仍然可以做到它所做的一切。在下面的例子里,我们打算忽略事务,因为它们在这个例子里没有多大意义。



再来看看Spring的实现方式:



Hello.java:
Java代码 复制代码
    package com.tss.beans;   
      
    public interface Hello {   
        String sayHello(String name);   
    }  

package com.tss.beans;

public interface Hello {
    String sayHello(String name);
}

 


HelloImpl.java:
Java代码 复制代码
    package com.tss.beans;   
      
    import java.util.Date;   
      
    public class HelloImpl implements Hello {   
        public String sayHello(String name) {   
            return "Hello, "+name+" ("+new Date()+")";   
        }   
    }  

package com.tss.beans;

import java.util.Date;

public class HelloImpl implements Hello {
    public String sayHello(String name) {
        return "Hello, "+name+" ("+new Date()+")";
    }
}





(在这里你也许就明白为什么说事务对于这个bean来说是无关紧要了吧)


现在需要在Web.xml配置Spring,加上context-param以及两个listener。于是Web.xml就多了以下内容:



web.xml(添加内容):
Xml代码 复制代码
    <context-param>  
           <param-name>contextConfigLocation</param-name>  
           <param-value>/WEB-INF/applicationContext*.xml</param-value>  
       </context-param>  
      
       <listener>  
           <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
       </listener>  
      
      <listener>  
          <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  
      </listener>  

 <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext*.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

同样,我们需要定义一个新的faces-config.xml文件,在里面设置允许Spring来帮助解析。faces-config.xml设置如下:



faces-config.xml:
Xml代码 复制代码
    <?xml version='1.0' encoding='UTF-8'?>  
    <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_1_2.xsd"  
                  version="1.2">  
        <application>  
            <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>  
        </application>  
    </faces-config>  

<?xml version='1.0' encoding='UTF-8'?>
<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_1_2.xsd"
              version="1.2">
    <application>
        <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
    </application>
</faces-config>

再来看看applicationContext.xml,它在WEB-INF文件夹下:

applicationContext.xml:
Xml代码 复制代码
    <?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
           xmlns:jee="http://www.springframework.org/schema/jee"  
           xmlns:context="http://www.springframework.org/schema/context"  
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
           http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd   
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
        <context:annotation-config />  
       <bean id="renderManager" class="com.icesoft.faces.async.render.RenderManager" scope="singleton" />  
       <bean id="timebean" class="com.tss.beans.TimeBean" lazy-init="true" scope="session">  
           <property name="renderManager" ref="renderManager"/>  
       </bean>  
   </beans>  

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <context:annotation-config />
    <bean id="renderManager" class="com.icesoft.faces.async.render.RenderManager" scope="singleton" />
    <bean id="timebean" class="com.tss.beans.TimeBean" lazy-init="true" scope="session">
        <property name="renderManager" ref="renderManager"/>
    </bean>
</beans>





在这里有一点很重要:每一个引用renderManager的bean都可以这样设置lazy-init=”true”,原因是当bean加载的时候PersistentFacesState可以不要求也跟着初始化。


一旦发生改变,你可以重新在两个浏览器之间调用“example.iface”来访问example.jsp页面,并且每秒都观察它们的更新,这与刚开始的那个非Spring版本是一样的。值得注意的是,尽管Spring2.5已经简化不少了,但如果要求再对TimeBean.java做一些修改,还是有意义的。


在这里我们需要修改setRenderManager()方法,把它重命名为“initClock()”并将参数去掉,然后把@PostConstruct加上,这样的话当这个bean被实例化后“initClock()”方法会立即被调用。


Java代码 复制代码
    @PostConstruct  
      public void initClock() {   
          System.out.println(renderManager);   
          clock = renderManager.getIntervalRenderer("clock");   
          clock.setInterval(interval);   
          clock.add(this);   
          clock.requestRender();   
      }  

  @PostConstruct
    public void initClock() {
        System.out.println(renderManager);
        clock = renderManager.getIntervalRenderer("clock");
        clock.setInterval(interval);
        clock.add(this);
        clock.requestRender();
    }




当然少了setRenderManager(),就少了对renderManager的注入。我们可以加上@Autowired

Java代码 复制代码

   @Autowired 
       RenderManager renderManager; 

@Autowired
    RenderManager renderManager;



再次来到applicationContext.xml,修改如下:

Xml代码 复制代码
    <bean id="renderManager" class="com.icesoft.faces.async.render.RenderManager" scope="singleton" />  
        <bean id="timebean" class="com.tss.beans.TimeBean" lazy-init="true" scope="session" />  

<bean id="renderManager" class="com.icesoft.faces.async.render.RenderManager" scope="singleton" />
    <bean id="timebean" class="com.tss.beans.TimeBean" lazy-init="true" scope="session" />



现在没有显示的将两个bean绑定在一起。Spring会通过autowire来自动检测TimeBean里的renderManager属性,并且通过在它的配置文件里注册的bean找到其唯一的实例,将其注入进去。这使得配置更加容易。
分享到:
评论

相关推荐

    Java.EE.7.Development.with.NetBeans.8

    Title: Java EE 7 Development with NetBeans 8 Author: David R. Heffelfinger Length: 362 pages Edition: 1 Language: English Publisher: Packt Publishing Publication Date: 2015-01-30 ISBN-10: 1783983523 ...

    spring icefaces hibernate 整合

    spring icefaces hibernate 整合,主要是web.xml文件的listener的配置和faces-config.xml里相关spring的配置

    ICEfaces 1.8 .pdf

    ICEfaces 1.8 .pdf,详细介绍JSF的一个优秀的框架的知识

    ICEFaces 2.0

    根据以往做过的ICEface的经验, 初次尝试了ICEFaces 2.0Beta. 极力推荐这个便捷的AJAX框架.开发工具是Intellij Idea 9.0.3. 废话少说,各自体验吧.

    ICEfaces 4.0

    icefaces 资源

    JavaEE登陆程序(JSF+ICEFaces)好东东

    JSF+ICEFaces 做的一个小登陆,大家凑合着看看,小弟初学乍练,有什么不好的大家包涵包涵。

    icefaces API

    官网的icefaces 的API 学习icefaces入门者必备

    JSF Java Server Faces (JSF)框架

    由于由Java Community Process (JCP) 推动,属于Java EE 5中的技术规范,而受到了厂商的广泛支持。  JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像...

    ICEFaces Lib

    安装完ICEFaces Eclipse 插件后发现少了很多包,在建立icefaces工程的时候,往往需要到网上下载lib。所以本人在这里共享以下ICEFaces1.8的官方包。用意是省得大家在eclipse建立工程的时候专门去Icefaces官方网去下载...

    ICEFaces入门学习

    官网 http://www.icefaces.org DOWN下来的PDF.

    icefaces1.8 for netbeans6.7beta

    icefaces1.8 for netbeans6.7beta

    ICEfaces-1.8.1

    ICEfaces-1.8.1-Eclipse-3.4.2-plugins.zip

    ICEFaces :autocomplete-tutorial.zip

    ICEFaces :autocomplete-tutorial.zip this code show how to use icefaces autocomplete!

    IceFaces安装auctionMonitor示例

    IceFaces安装auctionMonitor示例

    hibernate+icefaces

    hibernate 和icefaces的使用

    IceFaces Developer's Guide

    开发IceFacesJSF必备.这是官方的开发文档,有各种组件的介绍。不久WoodStock就要完全一直到IceFaces了!

    IceFaces 标签 API

    官网API,英文版 绝对可用官网API,英文版 绝对可用

    icefaces eclipse plugin

    jsf流行框架icefaces的开发环境,eclipse插件

    ICEfaces 2 for eclipse

    ICEfaces 2 for eclipse是基于JSF V2标准的组件系统并且无缝集成在ECLIPSE环境中。它提供了100多个web组件,插件安装配置容易

    ICEfacesDevelopersGuide.pdf

    Access reference information for the following: ¡ª ICEfaces system configuratio ¡ªJ S F P a g e M a r k u ¡ª Java API referenc ¡ª JavaScript API referenc ¡ª Custom Component...

Global site tag (gtag.js) - Google Analytics