`
former
  • 浏览: 96292 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

自己做的Ajax4Jsf 的几个小例子

阅读更多

JSF好像充满了争议,被很多Java大牛们所抱怨,而很多主流厂商却非常支持,毕竟是J2EE5的亲生儿子嘛。

而Ajax却是Web2.0的热门技术之一,N多客户问我,今天你们Ajax了没有?

Ajax4Jsf是结合这两样技术的一个开源项目,本周刚被Jboss从Exadel收购(合作?),闲暇时分,和一哥们一同试了把它的功能,现交个作业。

首先,A4J是开源的,而且文档比较齐全,demo丰富,它有个分支是G4J,即GWT4JSF,但是这次Jboss收购了之后好像没有在其官方网站上看到G4J的消息,如果大家感兴趣,The Server Side 上有说G4J的文章可以参考。

其次,A4J除了能很顺手的用手工编写Jsp的方式书写(废话),Exadel公司还出了一款功能强大的Eclipse Plugin:Exadel Studio Pro,现在也一并给了Jboss,并可以免费使用,而且将于今年夏天开源,感兴趣的朋友可以试用下。

现在让我们用一个注册页面的小例子,看看他的几个简单的功能:

1.根据鼠标事件,自动验证输入值并返回结果

效果1:验证中

效果2:验证错误

效果3:验证成功

功能很简单,代码也简单:

xml 代码
<t:column><a4j:region id="reg_email">
  1. <a4j:region id="reg_email">  
  2.     <t:panelGrid columns="4" cellpadding="0" cellspacing="0"  
  3.         border="0">  
  4.         <t:column width="12">  
  5.             <t:outputText value="电子邮件" />  
  6.         t:column>  
  7.         <t:column>  
  8.                 <t:inputText value="#{loginBean.email}" id="email">  
  9.                     <a4j:support  
  10.                         actionListener="#{loginBean.processEmailValidation}"  
  11.                         event="onblur" reRender="detail_mail">  
  12.                     a4j:support>  
  13.                 t:inputText>  
  14.         t:column>  
  15.         <t:column>  
  16.             <a4j:status for="reg_email">  
  17.                 <f:facet name="start">  
  18.                     <t:panelGrid border="1" cellpadding="0" cellspacing="0"  
  19.                         columns="1" styleClass="bighei" bgcolor="#FFF200">  
  20.                         <t:outputText value="验证中.." />  
  21.                     t:panelGrid>  
  22.                 f:facet>  
  23.                 <f:facet name="stop">  
  24.                     <a4j:outputPanel id="detail_mail">  
  25.                         <t:panelGrid border="1" cellpadding="0" cellspacing="0"  
  26.                             columns="1" styleClass="bighei" bgcolor="#FFF2E9"  
  27.                             rendered="#{!loginBean.validEmail}">  
  28.                             <t:outputText value="#{loginBean.validEmailStr}">t:outputText>  
  29.                         t:panelGrid>  
  30.                         <t:panelGrid border="1" cellpadding="0" cellspacing="0"  
  31.                             columns="1" styleClass="bighei" bgcolor="#E2F5FF"  
  32.                             rendered="#{loginBean.validEmail}">  
  33.                             <t:outputText value="邮箱地址填写正确!">t:outputText>  
  34.                         t:panelGrid>  
  35.                     a4j:outputPanel>  
  36.                 f:facet>  
  37.             a4j:status>  
  38.         t:column>  
  39.     t:panelGrid>  
  40. a4j:region>  

加粗的部分是a4j的一些页面片段,简单介绍一下:

xml 代码
  1. <a4j:support  
  2.     actionListener="#{loginBean.processEmailValidation}"  
  3.     event="onblur" reRender="detail_mail">  
  4. a4j:support>  

监听inputText 的鼠标事件onblur,并执行loginBean中的processEmailValidation方法,执行完毕后刷新id为"detail_mail"的标签区域。<a4j:status for="reg_email"></a4j:status><a4j:status for="reg_email"><a4j:outputpanel id="detail_mail"><a4j:status for="reg_email">监听reg_email定义的区域中的状态变化, 并通过<f:facet name="&amp;lt;strong&amp;gt;start&lt;/strong&gt;"></f:facet><f:facet name="start"><f:facet name="start">和<f:facet name="stop"></f:facet><f:facet name="stop"><f:facet name="start"><f:facet name="stop">显示状态改变时,和改变后的页面。<a4j:outputpanel id="detail_mail"></a4j:outputpanel><a4j:outputpanel id="detail_mail"> </a4j:outputpanel></f:facet></f:facet></f:facet></f:facet></f:facet></a4j:status></a4j:outputpanel></a4j:status><a4j:status for="reg_email"><a4j:outputpanel><a4j:status for="reg_email"><f:facet name="start"><f:facet name="stop"><f:facet name="start"><f:facet name="stop"><a4j:outputpanel>中的内容比较简单,根据bean中的validEmail属性的值,决定显示那个panelgrid。这里应该有更简单的写法,不知道大家有没有发现?</a4j:outputpanel></f:facet></f:facet></f:facet></f:facet></a4j:status></a4j:outputpanel></a4j:status>

bean部分的验证代码更简单:

java 代码
  1. public void processEmailValidation(ActionEvent input) {   
  2.     if (ModelValidation.validateEmail(getEmail())) {   
  3.         try {   
  4.             userService.checkEmail(getEmail());   
  5.             setValidEmail(true);   
  6.         }   
  7.         catch (ReduplicateException e) {   
  8.             setValidEmail(false);   
  9.             setValidEmailStr("对不起,此email已被注册!");   
  10.         }   
  11.     }   
  12.     else {   
  13.         setValidEmail(false);   
  14.         setValidEmailStr("邮件地址格式错误!");   
  15.     }   
  16. }  

其中userService通过Ioc注入,与数据库交互,并进行一些简单的如长度等的验证。

2.验证码图片,并可通过点击图片自身来刷新

效果:

页面代码:

xml 代码
  1. <a4j:outputPanel id="detail_media">  
  2.     <a4j:commandLink reRender="detail_media">  
  3.         <a4j:mediaOutput element="img" cacheable="false"  
  4.             session="false" createContent="#{loginBean.paint}"  
  5.             value="#{paintData}" mimeType="image/jpeg" />  
  6.     a4j:commandLink>  
  7. a4j:outputPanel>  

java bean中代码:

java 代码
  1. public void paint(OutputStream out, Object data) throws IOException {   
  2.     if (data instanceof PaintData) {   
  3.         PaintData paintData = (PaintData) data;   
  4.         // 生成一个在1000-9999之间的随机数   
  5.         Random randomNumber = new Random();   
  6.         int outPutNumber_int = 0;   
  7.         while (outPutNumber_int < 1000) {   
  8.             outPutNumber_int = randomNumber.nextInt(9999);   
  9.         }   
  10.         // 生成干扰线的随机数   
  11.         int outPutLine = 0;   
  12.         outPutLine = randomNumber.nextInt(100);   
  13.         String outPutNumber_str = String.valueOf(outPutNumber_int);   
  14.         BufferedImage img = new BufferedImage(paintData.getWidth(),   
  15.                 paintData.getHeight(), BufferedImage.TYPE_INT_RGB);   
  16.         Graphics2D graphics2D = img.createGraphics();   
  17.         graphics2D.setBackground(paintData.getBackground());   
  18.         graphics2D.setColor(paintData.getDrawColor());   
  19.         graphics2D.clearRect(00, paintData.getWidth(), paintData   
  20.                 .getHeight());   
  21.         graphics2D.drawLine(outPutLine, outPutLine, paintData.getWidth()   
  22.                 - outPutLine, paintData.getHeight() - outPutLine);   
  23.         graphics2D.drawString(outPutNumber_str, 1916);   
  24.         ImageIO.write(img, "jpeg", out);   
  25.     }   
  26. }  

简单聊一下,中的paint方法得到图片的流。这个方法必须这样定义:public void paint(OutputStream out, Object data).出图片的方法很多,这里出个最简单的做例子。

页面则更为简单,除了之前说的

上面2个例子没有写任何js,java bean也没有做过多的更改,个人认为a4j还是比较容易与jsf结合的。而建立在a4j之上的richi faces组件有着更好的页面效果和更丰富的功能。

</a4j:region></t:column>
分享到:
评论
6 楼 likehibernate 2007-04-20  
我有试过在我们的项目中使用,但是在配置web.xml时碰到了问题,因为项目在赶,为了稳定起见放弃了。但不会放弃学习的,希望还有机会多和大家交流一下!
5 楼 wangwenpinghello 2007-04-18  
太好了,能写一个动态树的例子就更好了
4 楼 former 2007-04-03  
lixigua 写道
我找了找ajax4jsf的例子,实在不好找呢。下载的代码竟然没有例子。
修改:
没看仔细,在jboss上已看到了。


在jboss网站的demo菜单下就有例子和源码,很详细.我做的只是把他的demo复杂话,并且用在实际项目中.
3 楼 czguofei 2007-04-02  
正在研究呢,谢谢
2 楼 lixigua 2007-04-02  
我找了找ajax4jsf的例子,实在不好找呢。下载的代码竟然没有例子。
修改:
没看仔细,在jboss上已看到了。
1 楼 flydeer2003 2007-03-16  
好东西,学习了,ajax的效果确实非常诱人,也非常符合web2.0的技术需求,再加上和JSF的结合,很棒的组合,其实JSF的实现也是依赖于js的,曾看到有网友说sun是想借ajax来挽救java在J2EE领域的表现,尤其是在web2.0逐渐盛行之时,不管怎样,我还是很看好的。

相关推荐

    ajax4jsf使用手册

    安装Ajax4JSF通常涉及以下几个步骤: 1. 下载Ajax4JSF的JAR文件。 2. 将JAR文件添加到项目的类路径中。 3. 在Web.xml中配置Ajax4JSF的监听器和过滤器。 4. 在JSF页面中导入Ajax4JSF的命名空间。 ### 3. Ajax4JSF 的...

    JSF2.0 的ajax实现的例子,配有详细的中文注释

    在这个例子中,我们将深入探讨JSF 2.0如何实现Ajax功能,并通过详细的中文注释来辅助理解。** ### 1. JSF 2.0 的Ajax基础 Ajax(Asynchronous JavaScript and XML)允许在不刷新整个页面的情况下更新部分网页内容...

    jsf 最简单的eclipse工程例子

    这个例子可能包含了以下几个关键步骤: 1. **创建JSF工程**:首先,你需要在Eclipse中新建一个Dynamic Web Project。确保选择JSF支持,并指定JSF的版本,比如JSF 2.x。此外,你可能还需要配置Apache Tomcat或类似的...

    JSF2.0实战 - 1-3、Hello World,AJAX体验,onPageLoad

    在JSF中创建一个简单的“Hello World”程序涉及到以下几个步骤: 1. **配置环境**:确保你已经安装了Java Development Kit (JDK) 和一个支持JSF的服务器,如Tomcat或GlassFish。接着,添加JSF库到项目的类路径中,...

    jsf demo 各种实例

    在学习JSF时,了解和掌握以下几个关键点至关重要: 1. **Facelets** - JSF 2.0引入的新视图技术,取代了之前的JSP作为默认视图表示,使得页面结构更清晰,更易于维护。 2. **Managed Beans** - 用于存储和处理业务...

    集合struts/spring/hibernate/ajax的一个案例

    一个关于ssha最基础的集合的例子,还用到了json。这个小项目用到了struts,spring,hibernate,异步刷新(ajax),json等技术。如果你刚接触这几个框架,或是想尝试结合这几个框架,那这个项目对你来说很有用。

    JSF三级级联

    在这个例子中,`#{globalregionmb.allProvinceList}`、`#{globalregionmb.allSecondCityList}` 和 `#{globalregionmb.allThirdCityList}` 就是这些数据列表。 2. **JSF组件**: - 使用`h:selectOneMenu`来创建下拉...

    Jsf2.0 Refrence

    在"Jsf2.0 Reference"中,我们能够深入理解JSF的核心概念和技术,这包括但不限于以下几个方面: 1. **JSF生命周期**:JSF组件有其独特的生命周期,包括六种阶段:恢复视图、应用请求值、处理验证、更新模型值、调用...

    JSF helloworld

    我们将探讨以下几个关键知识点: 1. **JSF 概述** JSF 是一种组件驱动的MVC(Model-View-Controller)框架,它简化了创建和维护Web应用的过程。JSF 提供了一组UI组件、事件处理机制以及数据绑定功能,让开发者可以...

    JSF 入门实例 代码

    然后,创建一个简单的JSF项目通常包括以下几个步骤: 1. 创建一个新的Web项目并配置JSF支持。 2. 创建JSF页面(`.xhtml` 文件),使用JSF组件编写用户界面。 3. 编写后端的Java类(通常称为 Managed Beans),这些...

    jsf教程原蚂

    **描述中提到的"jsf教程原蚂"** 暂未提供具体的描述,但通常一个JSF教程会包括以下几个关键部分: 1. **JSF基础**:介绍JSF的基本架构,包括组件库、生命周期、事件处理和渲染过程。 2. **组件使用**:讲解JSF中的...

    JSF 应用 在线购物系统

    - **书籍**:作为商品的一个具体例子,在系统中可以添加、删除、修改书籍信息。 - **购物车**:记录用户选择的商品列表。 - **订单**:当用户完成购买后,系统会生成订单记录。 用户可以在系统中进行的操作包括但不...

    《JSF入门》简体中文版

    在**《JSF入门》简体中文版**这本书中,读者可以系统地学习JSF的基础知识,包括以下几个主要部分: 1. **JSF基础**:介绍JSF框架的基本架构和工作原理,包括生命周期和渲染过程。JSF通过请求处理周期管理用户交互,...

    JSF树型菜单.rar

    在JSF中实现树型菜单,你需要做以下几步: 1. **定义模型**:首先,你需要创建一个数据模型,表示树的结构。这通常是一个Java类,包含属性来表示节点的值和子节点列表。例如,你可以创建一个`TreeNode`类,其中包含...

    JSF 实例

    在"JSF实例"中,我们主要关注的是如何使用JSF来实现登录功能,这通常涉及到以下几个关键知识点: 1. **JSF组件库**:JSF提供了多种内置组件,如`&lt;h:inputText&gt;`用于文本输入,`&lt;h:commandButton&gt;`用于提交表单等。...

    jsf第三讲事件监听

    创建自定义事件通常涉及以下几个步骤: 1. 定义事件类:继承自`javax.faces.event.FacesEvent`,并实现`isAppropriateListener`和`getComponent`方法。 2. 创建事件监听器接口:定义一个接口,包含处理事件的方法...

    richfaces-ui-3.2.2.GA-src.zip

    1. **项目结构**:解压后的richfaces-ui-3.2.2.GA文件夹主要包含以下几个部分: - `src`:源代码目录,包含了所有Java源文件。 - `build.xml`:Ant构建脚本,用于编译、打包和测试源码。 - `docs`:文档目录,...

    JSF编程,共享一本书(二)

    通常,这样的内容可能包括以下几个方面: 1. **JSF架构**:JSF框架由一系列组件、渲染器、事件处理机制和生命周期组成。开发者可以通过定义自定义组件来扩展其功能。JSF的生命周期包括六到七个阶段,包括恢复视图、...

    JQuery日历控件

    在给定的信息中,我们可以看到几个关键文件,它们共同构成了这个jQuery日历插件的组成部分。 1. **calendar.css**:这是一个CSS样式文件,用于定义日历控件的外观和布局。它可能包含各种CSS规则,如颜色、字体、...

    二次开发arcgis_server_for_java

    - **工具开发步骤:**通常,开发自定义工具涉及以下几个步骤:定义工具的输入参数、定义工具的执行逻辑、返回结果给客户端等。 - **工具示例:**一个具体的例子是实现一个空间查询工具,该工具可以根据用户提供的...

Global site tag (gtag.js) - Google Analytics