先以一个问题开始,如果我们的webapplication中对geodatabase进行了编辑,大家都知道,这个时候需要一个提交编辑并保存,或者提交编辑并取消的过程,大家都用过ArcMAP,如果没有用过ArcMAP,word总是用过的,编辑过的东西,一关闭,肯定会给你警告。这个问题在桌面程序中简直就不是问题,在web上,我们倒是可以来说一说了,因为server和你的browser可能相距几万公里,你这边要关闭browser,在美国的服务器怎么能够知道你要关闭呢?服务器上运行的是JSF的Bean,而客户端运行的是Javascript,怎么让Javascript去感知后台的情况,给用户一个提示,这样就会很好地显示我们程序的友好性,对建设以人为本的和谐社会也大有好处。那么我们来看看如何做这个事情。
Browser关闭时会产生onUnload事件,有了这个事件,使我们有机会做一些事情,比如下面的语句,显示一个信息
<body onUnload="javascript: alert('你要关闭我么?')">
在body中添加了这一句后,是不是已经看到了那个温柔的问句呢?如果是,那么你的Browser是支持这个onUnload事件的。下面来看这段代码:
function checkTime(){
var isModified=<c:out value="${editBean.edited }"/>;
if(isModified ==true)
alert("更新没有保存");
}
这个代码很有意思,其它的好说,<c:out value="${editBean.edited }"/>不好理解,这是JSTL,如果没有见过JSTL,google或者baidu一下看看吧。editBean是一个标准的JSF的bean,它在faces-config.xml文件中部署,它有一个属性和属性的getter,setter方法,如下:
private boolean edited=false;
public boolean isEdited() {
return edited;
}
public void setEdited(boolean edited) {
this.edited = edited;
}
你在开始编辑的时候,设置edited为true就可以了。JSTL能够用过<c:out>标签访问到这个bean的值。这样,就实现了前台Javascript和后台JSF bean的联动。
AJAX和JSF如何结合。
这是将来SERVER JAVA的开发人员都会问的一个问题。那么如何能够让AJAX能够在服务器上和客户端连起来。
要应用AJAX的条件是:
1、 一个支持javascript的浏览器,当然,现在主流的浏览器都是支持Javascript的。
2、 浏览器必须支持XMLHTTP或者XMLHttpRequest对象。
3、 能够以XML发送响应的服务器端。服务器端可以有很多的技术来实现,不管你是用ASP,JAVA,都可以实现。当然,本文要讨论的局限于JSF技术。
对于熟悉大多数服务器端程序编写的工程师,比如我,Javascript完全是另外一个世界。但是了解Javascript,将使你的程序更加强大,开发起来更加容易。一个很有意思的功能是如果用户在编辑地图的时候,编辑到中途,忘记保存了,这提醒我们可以做一个比较有意思的功能,自动保存。在google mail中,你是不是已经感觉到过这个自动保存的功能了呢?反正我当时看到的时候吓了一跳。以一个服务器端程序员的思路去思考,会觉得不可思议。事实上这个功能就可以用Ajax技术来实现,用一个定时器,每隔5分钟自动发送一个保存的请求就可以实现这样的功能。
再看一个自动查找的例子,比如一个输入一个用户后自动出来和该用户有关的信息,可以通过这样的方法来实现:
<input type="text" id="query" size="20" onkeyup="search(‘query’);">
Search(‘query’)方法可以发送一个Ajax请求到客户端,进行查询后,将结果以XML请求返回,这样就不需要刷新整个页面而进行部分更新。就这么一个小小的技术,让用户在继续Web 浏览的时候感觉更好,也成为了各个网站争相模仿的对象,一些开发人员也发现了宝贝一样言必称Ajax,甚至成为项目选型的关键,这大概也是最初的开发者想象不到的。
来看看Javascript如何来发送一个XMLHttpRequest请求的。来看一下下面的代码:
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
这是再简单不过的实例化XMLHttpRequest的一段代码,实例化一个之后,你就可以像操作一个普通的对象一样操作它,它有很多的方法,比如下面的方法是建立和服务器端的链接:
req.open("GET", url, true);
第一个参数是HTTP请求的方式:”Get”或者”Post”,第二个参数是服务器的URL,第三个参数是是否进行非同步的请求。大家如果已经仔细研究了我们ESRI的工具标签,你会发现这些标签里面有一个clientPostBack属性可以设置是否进行异步请求。我们可以知道,Web ADF在后面肯定用了open方法的第三个参数来进行。要小心的是,如果你要设置clientPostBack为true,你的javascript代码可能需要重新构建一下。不然这些代码可能不会被执行。因为异步请求更新的是部分页面。
异步请求的意思是在请求时浏览器可以做其它的事情,那么如何得知服务器端的处理已经结束,可以更新页面上的数据了呢?我们来看看XMLHttpRequest对象的方法
req.onreadystatechange = processXMLResponse;
当服务器端的处理结束时,就可以调用processXMLResponse方法,我们就可以通过对这个方法进行编程来处理请求,当然可以是任何的名字的方法,只要将方法注册到onreadystatechange方法即可。
XMLHttpRequest初始化完成后就可以发送到请求到服务器端了,用一个很简单的方法即可:
req.send(null);
当然,一般get用的实在太少,我们最关心的是Post,看看Post应该怎么做:
req.open("POST", "/agsviewer", true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded";
req.send("__ADFPostBack__=true&formId=f"+"&mapId=Map0&ajaxdemo=ajaxdemo ");
Post可以发送一些数据到服务器端,这正是我们所需要的。我们来继续看看一个请求当前比例尺的代码:
function updateInfoResponse(xmlHttp) {
if (xmlHttp != null && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var xml = xmlHttp.responseXML;
document.getElementById("scale").value = "1:" + xml.getElementsByTagName("scale").item(0).firstChild.nodeValue;
}
}
看一下判断了(xmlHttp != null && xmlHttp.readyState == 4 && xmlHttp.status == 200,判断4是表示处理已经结束,判断200表示HTTP请求正常,相信大家都见过404的HTTP请求,令人讨厌的“page not found”。
判断结束后,就用xml.getElementsByTagName("scale").item(0).firstChild.nodeValue;语句把比例尺取过来。
相信大家都大致知道AJAX是怎么回事了,下一次我会写一个简单的例子。
分享到:
相关推荐
9、ArcGIS Server JAVA讲座--实现后台JSF Bean和前台Javascript的联动 24 10、ArcGIS Server JAVA讲座 --AJAX基础 25 11、ArcGIS Server JAVA开发讲座--- ADF中的Ajax函数 27 12、ArcGIS Server Java讲座--如何在用...
在Web开发领域,Ajax4jsf是一个用于JavaServer Faces (JSF) 应用程序的 AJAX 支持库。它扩展了JSF的功能,允许开发者创建更具交互性和响应性的用户界面,无需每次交互都完全刷新整个页面。在这个“ajax4jsf 刷新...
内容概要:本文详细介绍了如何利用LTspice进行LDO(低压差线性稳压器)电源电路的仿真。首先讲解了如何导入LDO模型并配置仿真环境,接着深入探讨了瞬态分析、相位裕度、电源抑制比(PSRR)等关键仿真的具体步骤和注意事项。文中提供了多个实用的操作技巧,如通过调整补偿电容优化相位裕度,以及使用.step param命令批量测试不同参数的影响。此外,还分享了一些常见的仿真误区及其解决方法,帮助读者更好地理解和掌握LDO的设计与调试。 适合人群:电子工程专业学生、电源电路设计初学者、希望深入了解LDO特性的工程师。 使用场景及目标:适用于希望通过仿真工具提高LDO设计技能的人群。主要目标是掌握LDO的基本工作原理,学会使用LTspice进行各种类型的仿真分析,从而优化电路设计,确保系统的稳定性和性能。 其他说明:文章不仅提供详细的仿真步骤和技术细节,还附带了作者的实际经验和常见问题解决方案,使读者能够在实践中不断改进自己的设计思路。
渝安集团员工职业发展通道设计方案.ppt
内容概要:本文详细介绍了新能源电动汽车中VCU(整车控制器)和BMS(电池管理系统)的HIL(硬件在环)仿真技术。首先阐述了整车建模的基础,包括电池、电机等关键部件的建模要点。接着分别解析了驾驶员模块、仪表模块、BCU整车控制器模块、MCU电机模块、TCU变速箱模块、BMS电池管理模块等多个子模块的功能和实现方式。最后强调了HIL仿真在电动汽车控制系统测试和优化中的重要性,特别是在降低成本和风险方面的作用。 适合人群:从事新能源汽车研发的技术人员,尤其是专注于VCU和BMS领域的工程师。 使用场景及目标:适用于需要深入了解电动汽车控制系统仿真技术的研发团队,在产品开发初期进行系统测试和优化,确保各子系统间的协同工作正常。 其他说明:文中提供了大量代码示例,帮助读者更好地理解和实践相关概念和技术细节。此外,还分享了一些实际项目中的经验和教训,如故障注入测试的具体应用场景等。
如何应对一线人员春节后的离职潮
线性代数
离职面谈表.xls
聚宽对接qmt大礼包,配备需要的全部软件:python3.9版本,qmt模拟安装包,pycharm安装包,talib包
试用期转正表.xls
招聘数据分析.xls
如何让新员工快速融入团队
内容概要:本文详细介绍了并离网逆变器的两种主要控制策略——PQ控制和V/f控制,以及无功能量发生器(SVG)和有源电力滤波器(APF)的仿真模型。对于PQ控制,文章展示了如何将功率指令转化为电流指令,并强调了电网电压定向和限幅处理的重要性。V/f控制则用于离网模式,通过调节电压和频率来维持系统的稳定。SVG主要用于无功补偿,通过实时计算无功需求进行补偿。APF则专注于谐波检测和消除,利用自适应滤波器提高效率。此外,文中还提供了多个实用的小技巧,如仿真步长设置、模式切换时的前馈补偿等。 适合人群:从事电力电子仿真研究的技术人员,尤其是对逆变器控制策略感兴趣的工程师。 使用场景及目标:适用于需要深入理解和实现逆变器控制策略的研究项目,帮助工程师优化仿真模型,提升系统性能,确保仿真结果的准确性。 其他说明:文章不仅提供了详细的代码片段,还分享了许多实践经验,有助于读者避免常见错误,提高仿真成功率。
内容概要:本文详细介绍了如何利用Carsim与Simulink进行联合仿真,通过线性二自由度模型和卡尔曼滤波(KF)来估计车辆的质心侧偏角和横摆角速度。首先搭建了联合仿真框架,Carsim提供车辆状态量,Simulink负责算法处理。文中展示了线性二自由度模型的状态方程及其参数设定,并深入探讨了KF的两种实现方式:S函数编程和Simulink内置模块。对于S函数实现,着重讲解了状态转移矩阵的动态更新以及噪声矩阵Q的调整策略,确保模型能够适应车速变化。而对于内置模块,则指出了其在灵活性方面的不足之处。此外,还讨论了联合仿真的配置要点,如数据接口同步、采样时间和信号处理等问题。 适合人群:从事车辆动力学研究、控制理论应用、自动化控制领域的工程师和技术人员。 使用场景及目标:适用于需要精确估计车辆质心侧偏角和横摆角速度的研究和开发项目,特别是在涉及ESP等主动安全系统的开发过程中。目标是提高估计精度,增强系统的鲁棒性和响应速度。 其他说明:文章提供了详细的代码片段和实践经验分享,帮助读者更好地理解和实施相关技术。建议在实际应用中根据具体需求选择合适的KF实现方式,并注意处理各种边界条件和异常情况。
档案管理[03]
内容概要:本文详细介绍了风电与储能联合调频系统的原理及其优化方法。首先解释了风电输出功率的波动性和对电网频率的影响,提出储能系统作为解决方案。文中展示了如何用Python生成风速数据并构建调频控制系统,重点讨论了PID控制器的设计以及SOC(荷电状态)管理策略。此外,还探讨了调频控制逻辑、硬件在环测试、风电功率预测模型(如LSTM)、调频效果验证方法及储能系统的物理限制等问题。最后强调了模型验证的重要性,提出了异常数据注入测试的方法。 适合人群:从事电力系统自动化、新能源发电及储能技术研发的专业人士,尤其是有一定编程基础的研究人员和技术工程师。 使用场景及目标:适用于需要理解和实施风电与储能联合调频项目的团队。主要目标是提高电网稳定性,减少风电波动带来的负面影响,同时延长储能系统的使用寿命。 其他说明:文中提供了大量实用的Python代码示例,涵盖了从数据生成到控制逻辑实现再到模型验证的全过程。对于希望深入理解风储调频系统的工作机制和技术挑战的人来说,是一份非常有价值的参考资料。
HCIA-Storage V4.5 培训教材 合集
内容概要:本文详细介绍了利用西门子S7-1200系列PLC和博途V15软件平台构建的小车自动往返控制系统。首先进行硬件组态,选择合适的CPU并配置输入输出点位,确保限位开关和急停按钮的有效接入。接着编写梯形图逻辑,实现小车在AB两点间的精确控制,采用定时器互锁机制避免电机损坏。然后设计触摸屏界面,通过WinCC创建动画效果展示小车运动状态,并设置按钮操作实现手动与自动模式切换。最后进行联合仿真实验,解决常见错误如变量地址配置不当等问题,确保系统稳定运行。 适合人群:工业自动化领域的工程师和技术人员,尤其是对PLC编程和HMI设计有一定基础的学习者。 使用场景及目标:适用于需要掌握PLC控制系统设计全流程的专业人士,帮助他们理解如何整合硬件组态、梯形图编程以及HMI开发,最终完成一个完整的自动化工程项目。 其他说明:文中提供了详细的调试经验和技巧,附带74分钟的操作录像资料,有助于读者更好地理解和实践相关知识点。
公司员工关怀工作清单
内容概要:本文详细介绍了如何利用ANSYS/LS-DYNA进行多孔延时起爆和重复起爆的仿真。首先强调了起爆点的时间线控制和材料参数设置的重要性,如使用*INITIAL_DETONATION关键字设定起爆时间和坐标,以及配置JWL方程等材料属性。接着讨论了重复起爆的具体实现方式,包括使用*CONTROL_TERMINATION配合重启动功能,确保起爆点的正确复用。此外,文章还提供了调试技巧,如检查起爆同步性和优化时间步控制,以确保仿真的准确性。最后,分享了一些实际应用中的经验和常见错误,帮助用户更好地理解和掌握这一复杂的技术。 适合人群:从事爆炸力学研究和爆破工程设计的专业人士,尤其是有一定ANSYS/LS-DYNA使用经验的工程师。 使用场景及目标:适用于需要精确控制多个起爆点时间延迟和多次起爆的应用场合,如矿山开采、隧道挖掘等领域的爆破作业仿真。目标是提高爆破效率,减少对周围环境的影响。 其他说明:文中提到的许多技术细节对于初学者来说可能会有一定的难度,因此建议从简单的单孔起爆开始练习,逐步掌握复杂的多孔延时和重复起爆技术。同时,保持良好的注释习惯有助于追踪参数修改历史,便于后续调试和维护。