Ajax4Jsf 简单介绍

Ajax4jsf 允许开发人员将 Ajax 功能添加到 JSF 应用程序中,而不需要 JavaScript 或用 Ajax 图形部件替换现有的组件。这个包还允许在使用 Java 2D 库时动态地生成图像。Ajax 是一种编程技术,它处理只有页面的一部分需要处理而不需要重新装载整个页面的情况。这种方式的好处包括减少服务器上的处理时间以及加快客户端的响应速度。

与 Tomahawk 相似,Ajax4jsf 提供了一套可以很容易地与 JSF 标记一起使用的标记。在本教程后面对 Developer Forum Signup 示例应用程序进行改进时,将讨论这些标记的示例以及如何将 Ajax4jsf 与 Eclipse 进行集成。接下来,将学习组成这个库的每个组件、在使用它时必须记住的限制以及如何在 Eclipse 项目中添加 Ajax4jsf

组件

Ajax4jsf 组件被设计成可以轻松地与现有的 JSF 应用程序进行集成,同时提供了改进性能的 Ajax 功能。表 1 中描述了 Ajax4jsf 库中包含的所有标记。


表 1. Ajax4jsf 库标记

Ajax4jsf 组件描述
<a4j:actionListener>其效果类似于 JSF 中的 <f:actionListener> 或 <f:valueChangeListener> 标记,但是它用于 Ajax 容器。
<a4j:actionparam>结合了 <f:actionListener> 和 <f:param> JSF 标记的功能。
<a4j:commandButton>效果类似于被点击时的表单 Submit 按钮,但是呈现为 HTML <input> 标记。
<a4j:commandLink>效果类似于被点击时的表单 Submit 按钮,但是呈现为 HTML <a> 锚标记。
<a4j:loadBundle>装载当前视图的本地化资源束。
<a4j:mediaOutput>允许创建动态生成的内容。
<a4j:outputPanel>在页面上创建一个启用 Ajax 的部分,允许这个区域中的内容重新呈现(即使导致 Ajax 请求的组件没有专门提到这个区域)。
<a4j:page>呈现完整的 HTML 页面结构。但是,它必须是 JSF <f:view> 标记的第一个和惟一的子元素,在它外边不能有 HTML 代码。
<a4j:region>决定 JSF <f:view> 的哪个部分将通过为相关联的 Ajax 请求提供内容来处理。这会只更新页面中需要更新的部分,从而改进性能。
<a4j:status>通过指出请求何时开始或结束,提供关于指定区域的 Ajax 请求的客户端状态。
<a4j:support>将 Ajax 功能添加到与 JSF 相关的组件中。这个标记可能是最常用的。

根据场景,某些组件会比其他组件更常用。接下来,将学习在使用 Ajax4jsf 时必须记住的条件。

例子

<%@ taglib uri="/WEB-INF/ajax4jsf.tld" prefix="a4j"%>
<html>
<a4j:loadBundle basename="com.jci.fi.application.cbs.resources.cbsLiteResources" var="rb" />
<head><h:form id="childContractForm">	<h:panelGrid columns="2" columnClasses="widthCol200px,widthCol200px"><h:outputText value="#{rb['label.branch']}" styleClass="setLabel" /><h:panelGroup id="childBranch"><a4j:region><h:panelGroup id="branchInp1" style="display:table-cell;vertical-align:middle;"><h:inputText id="branch" styleClass="setText branch" value="#{prebookFacesBean.currentChildContract.jciBranchNumber}" size="3" maxlength="3" οnblur="handleBranchChange();"></h:inputText><h:inputHidden id ="branchOrgid" value ="#{prebookFacesBean.dataBean.executingBranch.orgId}"></h:inputHidden> <!--end Willie 7/12/2017 2:13  --><rich:suggestionbox id="suggestionBoxBranchNbr" styleClass="suggestionBoxBranchNbr" for="branch" suggestionAction="#{areaBean.autocompleteBranchForPreBookingChildContract}" var="branch" fetchValue="#{branch.branchNumber}" minChars="1" status="waitStatusNoBlock" eventsQueue="queueBranch" ignoreDupResponses="true" οnselect="refreshChildLob();" shadowOpacity="4" border="1" width="300" height="150" shadowDepth="4" cellpadding="2"nothingLabel="#{rb['message.noBranch']}"><h:column><h:outputText value="#{branch.branchNumber}" /></h:column><h:column><h:outputText value="#{branch.branchName}" style="font-style:italic" /></h:column><h:column><h:outputText value=" (#{rb['label.region']}: #{branch.areaNumber})" style="font-style:italic" /></h:column></rich:suggestionbox></h:panelGroup><h:panelGroup id="branchInp2" style="display:table-cell;vertical-align:middle;"><h:graphicImage id="branchLookUp" style="cursor: pointer;margin-left: 3px;" value="/images/lookup.gif" alt="#{rb['label.lookUp']}" οnclick="javascript:launchABWindow('child');"/></h:panelGroup><h:panelGroup id="branchInp3" style="display:table-cell;vertical-align:middle;"><h:outputText value="Invalid Branch" style="color:red;margin-left:5px;" rendered="#{prebookFacesBean.branchNotFound}"></h:outputText></h:panelGroup></a4j:region></h:panelGroup><h:outputText value="#{rb['label.lineOfBusiness']}" styleClass="setLabel" /><h:selectOneMenu id="childLob" styleClass="setText lob" value="#{prebookFacesBean.currentChildContract.jciLineOfBusiness.lob}"><f:selectItems value="#{prebookFacesBean.lobsListSelectItems}" /></h:selectOneMenu><h:outputText value="#{rb['label.contractTypeBL']}" styleClass="setLabel" /><h:selectOneMenu id="childtype" styleClass="setText type" value="#{prebookFacesBean.currentChildContract.contractType.contractType}"><f:selectItems value="#{prebookFacesBean.childContractTypesListSelectItems}" /><a4j:support event="onchange" action="#{prebookFacesBean.changeChildContractType}" ajaxSingle="true" reRender="preenter"></a4j:support></h:selectOneMenu><h:outputText value="#{rb['label.contractName']}" styleClass="setLabel" /><h:inputText id="name" styleClass="setText name" value="#{prebookFacesBean.currentChildContract.contractName}" maxlength="27"></h:inputText><h:outputText value="#{rb['label.preEnterOpenForCost']}?" styleClass="setLabel" /><h:selectBooleanCheckbox id="preenter" value="#{prebookFacesBean.currentChildContract.preEnter}" disabled="#{prebookFacesBean.childContractPreenterDisabled}" rendered="#{prebookFacesBean.userCanPreenter}" οnclick="isPreenterdChild(this.checked);"></h:selectBooleanCheckbox><h:outputText value="#{rb['label.no']}" rendered="#{!prebookFacesBean.userCanPreenter}"></h:outputText></h:panelGrid><rich:panel id="butnsPn" style="border-width: 0px; margin: 0px; text-align: center; width: 99%;"><a4j:commandButton id="save" status="waitStatus" type="button" styleClass="button" action="#{prebookFacesBean.saveChildContract}" οnclick="if(!validateChildContractPopup()) return false;"value="#{rb['button.save']}" reRender="childList,ds" oncomplete="Richfaces.hideModalPanel('childContractMP');"></a4j:commandButton><h:outputText value=" " escape="false"></h:outputText><a4j:commandButton id="cancel" type="button" styleClass="button" value="#{rb['button.cancel']}" οnclick="Richfaces.hideModalPanel('childContractMP');return false;"></a4j:commandButton></rich:panel><a4j:jsFunction ajaxSingle="true" name="refreshChildLob" reRender="childLob, childBranch" action="#{prebookFacesBean.populateLobs}" process="branch"></a4j:jsFunction></h:form>	

 

	<a4j:region><h:panelGroup id="branchInp1" style="display:table-cell;vertical-align:middle;"><h:inputText id="branch1" styleClass="setText branch" value="#{prebookFacesBean.contractNumber}" size="3" ></h:inputText><h:inputText id="branch2" styleClass="setText branch" value="#{prebookFacesBean.contractName}" size="3" ></h:inputText><h:inputText id="branch" styleClass="setText branch" value="#{prebookFacesBean.psaBranchNumber}" size="3" maxlength="3"></h:inputText><h:inputHidden id ="branchOrgid" value ="#{prebookFacesBean.dataBean.executingBranch.orgId}"></h:inputHidden><%-- <h:inputText id="branch1" styleClass="setText branch" value="" size="3" maxlength="3"></h:inputText><h:inputHidden id ="branchOrgid1" value ="#{prebookFacesBean.dataBean.executingBranch.orgId}"></h:inputHidden> --%>		<rich:suggestionbox id="suggestionBoxBranchNbr2" for="branch" suggestionAction="#{areaBean.autocompleteBranchForPreBookingPSAContract}" var="branch" fetchValue="#{branch.branchNumber}" minChars="1" status="waitStatusNoBlock" eventsQueue="queueBranch" ignoreDupResponses="true" shadowOpacity="4" border="1" width="300" height="150" shadowDepth="4" cellpadding="2"nothingLabel="#{rb['message.noBranch']}"><h:column><h:outputText value="#{branch.branchNumber}" /></h:column><h:column><h:outputText value="#{branch.branchName}" style="font-style:italic" /></h:column><h:column><h:outputText value=" (#{rb['label.region']}: #{branch.areaNumber})" style="font-style:italic" /></h:column></rich:suggestionbox>			</h:panelGroup><h:panelGroup id="branchInp2" style="display:table-cell;vertical-align:middle;"><h:graphicImage id="branchLookUp" style="cursor: pointer;margin-left: 3px;" value="/images/lookup.gif" alt="#{rb['label.lookUp']}" οnclick="javascript:launchABWindow('psa');"/></h:panelGroup><h:panelGroup id="branchInp3" style="display:table-cell;vertical-align:middle;"><a4j:commandButton id="getPSA" action="#{prebookFacesBean.lookupPSAContracts}" reRender="availablePSARes,availablePSANoRes" status="waitStatus" value="#{rb['label.submit']}" style="margin-left: 10px;" type="button" styleClass="button"></a4j:commandButton></h:panelGroup></a4j:region>

 

条件

根据 Ajax4jsf 文档所述,开发人员必须记住某些限制才能创建正确的 Ajax 和 JSF 应用程序:

  • Ajax4jsf 框架并不在页面上追加或删除元素,它只会替换页面上的元素。要想在页面上追加代码,应该使用一个空元素标出它的位置。
  • 应该只创建严格的符合标准的 HTML 和 XHTML 代码,不要省略任何必需的元素或属性,因为 Ajax 请求由 XMLHttpRequest 函数以 XML 格式创建。但是,这些请求的 XML 格式可能会避开浏览器中的大多数检验和任何纠正处理。
  • 最后,大多数 Ajax4jsf 标记有一个属性,它指定在发出 Ajax 请求之后要处理的元素的 ID。这些元素的 ID 必须匹配在 Ajax4jsf 标记的属性中指定的 ID,只有这样更新才会成功。

既然已经了解了组件和使用 Ajax4jsf 的条件,就需要将这个库添加到 Eclipse 项目中,然后才能对 Developer Forum Signup 应用程序进行改进。

转载于:https://www.cnblogs.com/Willie-WangLiang/p/7204981.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为M2平板打不开云课堂_能运行PC应用的安卓生产力平板:华为MatePad Pro 5G登场...

当手机屏幕无法承担更复杂的工作任务&#xff0c;当PC重量不能满足更随性的移动办公&#xff0c;拥有全面屏和便携优势的平板电脑或是中间值&#xff0c;但前提是其必须拥有足够强大的生产力。5月27日华为在国内上市的其首款5G平板——华为MatePad Pro 5G&#xff0c;就是5G时代…

或许你不知道的10条SQL技巧(转自58沈剑原创)

这几天在写索引&#xff0c;想到一些有意思的TIPS&#xff0c;希望大家有收获。 一、一些常见的SQL实践 &#xff08;1&#xff09;负向条件查询不能使用索引 select * from order where status!0 and stauts!1 not in/not exists都不是好习惯 可以优化为in查询&#xff1a; se…

dhtmlXGrid复选框点击事件

dhtmlXGrid复选框点击事件var mygrid; //加载初始界面 $(function () {mygrid new dhtmlXGridObject(colour);mygrid.setImagePath(getUrlPath() "/static/plugg/dhtmlx/dhtmlxGrid/codebase/imgs/");mygrid.setHeader("#master_checkbox,状态,查看,编辑,xxx,…

soa示例_SOA示例应用程序

soa示例SOA描述了一组用于创建松散耦合的&#xff0c;基于标准的&#xff0c;与业务相关的服务的模式&#xff0c;由于描述&#xff0c;实现和绑定之间的关注点分离&#xff0c;因此提供了新的灵活性。 近年来&#xff0c;至少在参与大多数信息技术活动的人们中&#xff0c;面向…

阿里云图片剪裁

ng-src"{{(buttomImg.imgUrl176h_632w_1e_1c)}}" alt"Space" 转载于:https://www.cnblogs.com/karila/p/7205967.html

body curl 设置post_curl 命令详解

常用参数常用参数分类# 调试类-v, --verbose 输出信息-q, --disable 在第一个参数位置设置后 .curlrc 的设置直接失效&#xff0c;这个参数会影响到 -K, --config -A, --user-agent -e, --referer-K, --config FILE …

sql语句lastupdate使用数据库库函数

sql语句lastupdate使用数据库库函数<sql id"Base_Column_List">CKLSH, ZJLX, ZJHM, MC, CBR, SJY, HJSZD, GJ, ZT, AH, FYDM, DJPC, LASTUPDATE, SSDW</sql><insert id"saveCkdx">INSERT INTO CK_CKDX(<include refid"Base_Colu…

NetBeans Java EE技巧7:忽略的Java类和XHTML编辑器快捷方式

有时&#xff0c;最被忽略的是IDE最有用的功能。 在本文中&#xff0c;我将概述在开发Java EE应用程序时可以使用的五个NetBeans Java和XHTML编辑器快捷方式。 &#xff03;1 –轻松修复命名空间和类 也许您已经向尚未声明名称空间的视图中添加了新的JSF标记&#xff0c;或者…

python学习第三十二节(进程间通信、进程池、协程)

当多线程创建完毕之后&#xff0c;start并没有了立刻运行&#xff0c;依旧需要和其他线程抢CPU的资格&#xff0c;只是时间很短。进程之间的通信分为两种&#xff0c;queue和pipe 1 import multiprocessing2 def foo(q):3 q.put([1,hello,True])4 if __name____main__:5 …

备份ad_IT管理公开课——备份恢复解决方案

时间&#xff1a;2020年5月28日 14:00内容&#xff1a;调查显示&#xff0c;44&#xff05;的客户面临意外删除或修改数据&#xff0c;如果没有提前备份&#xff0c;这些数据是很难恢复的。RecoveryManager Plus是一款针对AD域&#xff0c;Exchange&#xff0c;Sharepoint以及O…

Ajax中的url使用规则

Ajax中的url使用规则Ajax中的url使用规则如下&#xff1a; 先封装项目访问地址&#xff1a; String basePath request.getScheme() "://" request.getServerName() ":" request.getServerPort() request.getContextPath();然后在js中定义&#xff1…

[网络管理]全双工与半双工的差别

[网络管理]全双工与半双工的差别 同事说新办公室的网络一直不稳定&#xff0c;常常掉线延迟。检查进口线路和更换转接网线。都无法解决这个问题。预计是不是进口网线中一根或者2根短路&#xff0c;那就改动下网卡属性吧。 把自适应改成全双工10M模式&#xff0c;測试OK。全双工…

echarts大屏模板_完整的可视化大屏分享,科技感十足,各行业直接就能用

你的老板有没有要求过你做一个可视化大屏&#xff1f;或许在你看来&#xff0c;这就是一个无理的需求&#xff0c;很简单啊&#xff0c;做几个动态图表&#xff0c;直接投影到屏幕上不就行了&#xff1f;就算做出来能用数据增长业务吗&#xff1f;不懂为什么要拍脑袋做大屏&…

sql查询字段的值不为空

sql查询字段的值不为空SQRJS IS NOT NULL AND SQRJS <![CDATA[ <> ]]>

Java面试基础知识(1)

1、final, finally, finalize的区别final&#xff1a;修饰符&#xff08;关键字&#xff09;如果一个类被声明为final&#xff0c;没有子类也不能被继承。因此一个类不能既被声明为 abstract的&#xff0c;又被声明为final的。将变量或方法声明为final&#xff0c;可以保证它们…

bird 报表_轻松完成Birt报告

bird 报表这是使用Birt插件在Eclipse中构建报告的完整指南。 Birt或Business Intelligence and Reporting工具是一种无需编写太多Java代码即可生成报告的工具。 如果您使用的是ireport&#xff0c;那么您知道我在说什么&#xff1a;&#xff09;&#xff08;晶体报告..毫无意义…

通过kubeadm安装kubernetes 1.7文档记录[docker容器方式]

参照了网上N多文档&#xff0c;不一一列表&#xff0c;共享精神永存&#xff01;&#xff01;&#xff01;&#xff01; 获取所有安装包 安装包分为两类&#xff0c;rpm安装包和docker镜像 rpm安装包 rpm为以下四个 kubeadm-1.7.0-0.x86_64.rpm kubectl-1.7.0-0.x86_64.rpm ku…

san框架计数的textarea

san框架计数的textarea<template><div style"height: 100%;width:100%;"><div style"border-bottom: 1px solid #e7e7e7"><div style"height:230px;overflow: hidden;"><t-textarea id"cxfssy" value"…

京东五星电器送扫地机器人_京东五星电器联手打造互联网小家电“孵化器”

出新迭代迅速、件均价较低的生活小家电复购率高&#xff0c;易“种草”&#xff0c;是最具活力的家电品类。11月24日&#xff0c;京东小家电事业部联合京东五星电器召开“小家电发展战略沟通会”&#xff0c;美的、苏泊尔、九阳、小熊、雀巢、德龙、戴森、飞利浦、科沃斯等众多…

异或运算性质

异或性质**异或运算的性质**