- 浏览: 491891 次
- 性别:
- 来自: xiamen
文章分类
最新评论
-
陈乐鹏:
你这个下载要怎么玩?我这里老提示未安装!
[转]使用ScriptX控件进行Web打印总结 -
zqb666kkk:
博主有示例代码吗
cxf ws-security 加密和签名的实现 -
mclin0704:
你好,请问WSDL2Java 可以用java实现吗?
Java2WSDL之java实现 -
hubiao0629:
楼主,这个文件会有不兼容的问题把。
mysql5忘记密码后的处理方法 -
zhaoyubetter:
OK,可以试试!多谢楼主
后台管理界面收集
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代码 复制代码
在Servlet2.4下,annotation会被忽略掉。这的确很闹心,但也不是没有办法。这个时候Spring就可以在没有任何EJB的情况下,帮助我们管理
首先,我们建立一个web.xml来配置ICEFaces,同时建立的Web应用程序JSF必须是1.2版本。请看下面建好后的web.xml:
web.xml:
Xml代码 复制代码
现在我们还需要建立一个不断更新DOM的Bean。在这个例子中,我们使用了一个outputText来显示时钟(通过java.util.Date来实现),用另一个outputText来显示刷新的次数。更多详细内容可以在ICEFaces开发指南中找到,以下是faces-config.xml和TimeBean.java的源文件:
faces-config.xml:
Xml代码 复制代码
TimeBean.java:
Java代码 复制代码
最后,我们建立一个example.jsp页面,调用的时候名字叫“example.iface”
example.jsp:
Html代码 复制代码
现在,将此应用程序发布在应用服务器里,然后打开两个session(假定一个是 IE,一个是FireFox) 都去访问该页面,你会看到两个浏览器上面都会显示一个时钟。这个时候,如果有一方单击了那个“Refresh”超连接,两个浏览器窗口都会被刷新。
这就是在server端使用AJAX的推技术来传递DOM的更新。微小的DOM更新,造成的带宽消耗一般是不要考虑的,但请记住带宽不并总是富足的,你仍然有必要去测量网络流量有没有超过你的限制。
现在的问题是直接使用的Servlet规范是2.4。如果使用EJB3的语法来构造是有问题的。而EJB2又是一个“又糟糕又过时的东西”,不得不要求使用remote和home接口。这个时候如果使用Spring的话,仅仅多一些配置就几乎可以给你提供所有你想要的东西。
因此我们不再需要像EJB这样的组件了,甚至在没有使用它的情况下仍然可以做到它所做的一切。在下面的例子里,我们打算忽略事务,因为它们在这个例子里没有多大意义。
再来看看Spring的实现方式:
Hello.java:
Java代码 复制代码
HelloImpl.java:
Java代码 复制代码
(在这里你也许就明白为什么说事务对于这个bean来说是无关紧要了吧)
现在需要在Web.xml配置Spring,加上context-param以及两个listener。于是Web.xml就多了以下内容:
web.xml(添加内容):
Xml代码 复制代码
同样,我们需要定义一个新的faces-config.xml文件,在里面设置允许Spring来帮助解析。faces-config.xml设置如下:
faces-config.xml:
Xml代码 复制代码
再来看看applicationContext.xml,它在WEB-INF文件夹下:
applicationContext.xml:
Xml代码 复制代码
在这里有一点很重要:每一个引用renderManager的bean都可以这样设置lazy-init=”true”,原因是当bean加载的时候PersistentFacesState可以不要求也跟着初始化。
一旦发生改变,你可以重新在两个浏览器之间调用“example.iface”来访问example.jsp页面,并且每秒都观察它们的更新,这与刚开始的那个非Spring版本是一样的。值得注意的是,尽管Spring2.5已经简化不少了,但如果要求再对TimeBean.java做一些修改,还是有意义的。
在这里我们需要修改setRenderManager()方法,把它重命名为“initClock()”并将参数去掉,然后把@PostConstruct加上,这样的话当这个bean被实例化后“initClock()”方法会立即被调用。
Java代码 复制代码
当然少了setRenderManager(),就少了对renderManager的注入。我们可以加上@Autowired
Java代码 复制代码
@Autowired
RenderManager renderManager;
@Autowired
RenderManager renderManager;
再次来到applicationContext.xml,修改如下:
Xml代码 复制代码
现在没有显示的将两个bean绑定在一起。Spring会通过autowire来自动检测TimeBean里的renderManager属性,并且通过在它的配置文件里注册的bean找到其唯一的实例,将其注入进去。这使得配置更加容易。
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找到其唯一的实例,将其注入进去。这使得配置更加容易。
发表评论
-
Spring Quartz任务调度示例
2011-05-16 17:29 1095package com.xzl.quartz; i ... -
spring 声明式事务,Propagation属性列表
2011-04-02 10:42 917@Transactional(propagation = Pr ... -
Spring hibernate 缓存配置
2010-02-05 15:36 2140最近项目中需要处理hibernate缓存: 网络上看了些文章 ... -
使用 Spring 2.5 基于注解驱动的 Spring MVC
2008-12-06 17:00 1014http://www.ibm.com/developerwor ... -
Spring2.5+Hibernate3.2 注释 可以使用daobase
2008-12-06 01:22 1830很久没有写java代码,这次发现Spring2.5+hiber ... -
Spring2.5 注解的魔力
2008-11-30 22:51 1316转此文 特别感谢remote_ro ... -
spring2.5 struts2.0.11 hibernate3.2 联合开发
2008-11-30 22:35 1488建立支持是很容易的。用myeclipse6.5 当然不用他也一 ... -
Spring 2.5的新特性:配置简化和基于注解的功能
2008-11-30 22:21 914http://developer.51cto.com/art/ ... -
spring2.5 + hibernate3.2 标注(annotation)开发的简单示例
2008-11-30 18:44 1791转载于:IamHades的专栏http://blog.csdn ...
相关推荐
ICEfaces不仅仅是一个UI组件库,它还提供了一个完整的解决方案,包括Facelets视图层技术、Spring框架集成以及Java Persistence API (JPA) 支持。 1. **Ajax Push**:ICEfaces的核心特性之一是其Ajax Push技术,这...
在整合Spring和IceFaces时,我们需要在`faces-config.xml`中配置Spring的bean解析器,这样JSF组件就能访问Spring托管的bean。 ```xml <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver `...
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 ...
JSF和ICEFaces都支持与标准的安全框架如Spring Security或Java EE的Container Managed Security集成。 **总结** "JavaEE登陆程序(JSF+ICEFaces)"是一个利用这两种技术构建的登录示例,它展示了如何使用组件化和...
8. **开发工具集成**:ICEfaces 4.0 可以与主流的Java IDEs(如Eclipse, NetBeans, IntelliJ IDEA)无缝集成,提供方便的开发环境。 在“ICEfaces-4.0.0-bin”压缩包中,通常会包含以下内容: - **ICEfaces库**:...
在开发工具方面,使用IntelliJ IDEA 9.0.3,这是一款强大的Java集成开发环境,为ICEFaces开发提供了良好的支持。IDEA的代码提示、调试和版本控制等功能,能够帮助开发者更高效地进行ICEFaces应用的开发和维护。 ...
ICEfaces 插件将方便在 Eclipse 中开发和调试使用 ICEfaces 构建的 JSF 应用程序。 "ReleaseNotes.html" 文件通常包含关于版本更新的重要信息,包括新特性、已知问题、bug 修复以及对先前版本的改进。对于 ICEfaces...
ICEfaces 是一个开源的JavaServer Faces (JSF) 框架,专为构建富互联网应用程序(Rich Internet Applications,RIA)而设计。它提供了一套完整的组件库和强大的JavaScript库,使得开发人员能够轻松创建交互性强、...
IceFaces是一个开放源码的JavaServer Faces (JSF)组件库,它专注于提供富互联网应用程序(RIA)的开发工具。而NetBeans则是一个流行的开源集成开发环境(IDE),适用于Java、JavaScript等编程语言。这里的“beta”指...
10. **Spring框架与Java EE**:Spring框架是Java开发中的另一个重要工具,它可以与Java EE协同工作,提供更灵活的配置和更多的功能,如AOP(面向切面编程)和IOC(Inversion of Control)容器。 学习Java EE编程...
ICEFaces入门学习主要涵盖的是ICEFaces这一JavaServer Faces (JSF)组件库的使用和理解。ICEFaces是一款用于构建富互联网应用程序(Rich Internet Applications, RIA)的框架,它为开发者提供了丰富的用户界面组件和...
本文将探讨与客户端为中心的Ajax实现相关的根本性安全问题,并介绍如何通过基于服务器端的方法以及Java EE和ICEfaces来克服这些挑战。 #### 标题解析:“Enterprise-Ajax-Security-with-ICEfaces.pdf” 此标题明确...
ICEFaces 是一个强大的Java EE Web应用程序开发框架,专注于创建富互联网应用程序(Rich Internet Applications, RIA)。这个"autocomplete-tutorial.zip"压缩包提供了一个关于如何在ICEFaces框架中使用自动补全功能...
IceFaces是一个开源的JavaServer Faces(JSF)组件库,它提供了丰富的用户界面组件和先进的富互联网应用(RIA)功能。这个API主要关注的是IceFaces的自定义组件,这些组件极大地扩展了标准JSF组件的功能,为开发人员...
在IT领域,掌握各种技术和框架对于提升开发效率和构建高效系统至关重要。本教程集合涵盖了SpringJDBC、JSoup、CouchDB、Cassandra、JSF和Kotlin这六种技术,下面将对这些技术进行详细介绍。 1. SpringJDBC:Spring...
综上所述,IceFaces 开发者指南是一本全面且详尽的手册,旨在帮助开发者深入理解 IceFaces 框架的核心概念、架构和开发实践。通过阅读这份指南,开发者不仅能够获得 IceFaces 的基本使用方法,还能掌握其高级特性和...
【ICEFaces+JSF】是关于使用ICEFaces框架与JavaServer Faces (JSF) 技术的集成。JSF是一种用于构建Web应用程序的MVC框架,它为开发者提供了丰富的组件库和事件处理机制。ICEFaces是JSF的一个扩展,特别强调了AJAX...
ICEfaces 2是一款高度先进的JavaServer Faces (JSF) 框架,专为构建富互联网应用程序(RIA)而设计。这款框架的核心在于其与Eclipse IDE的无缝集成,为开发者提供了一个高效的工作环境,使得在JSF 2标准基础上开发用户...
Eclipse 3.5.0,又称为Galileo,是Eclipse IDE的一个重要版本,它引入了新的特性,比如改进的JavaScript编辑器和Git版本控制支持,以及对Java EE 6的支持。因此,ICEfaces插件与Eclipse 3.5.0的兼容性意味着开发者...
**标题:“icefaces eclipse plugin...总的来说,“icefaces eclipse plugin”为JSF开发人员提供了一个高效且便捷的开发环境,通过整合IceFaces的强大功能和Eclipse的优秀开发工具,提升了开发Web应用的生产力和质量。