最近在自己的一个小项目中使用了ext+jsonrpc直接调用后台暴露的业务逻辑接口方式,在使用的过程中遇到了不少问题,在这里和大家分享一下:)
最初在整合jsonrpc的时候遇到个问题,就是它的bridge是和session绑定的,很讨厌这种方式,得要在每个jsp中写那恶心的标签.后来自己找找,发现有个getGlobalBridge可以获取全局bridge,然后自己写了个小工具,让其可以把spring中的业务逻辑bean通过配置文件直接暴露出去.
/**
* 映射JSONBridge与Spring所管理的对象.
*
* @version 2008.07.04
* @author bin
*/
public class JSONRPCSpringMappingListener implements ServletContextListener {
/** 全局资源文件属性名 */
private static String CONFIGNAME = "JSONRPCSpringMappingConfig";
public void contextDestroyed(ServletContextEvent sce) {
}
public void contextInitialized(ServletContextEvent sce) {
Properties properties = new Properties();
WebApplicationContext context = WebApplicationContextUtils
.getWebApplicationContext(sce.getServletContext());
JSONRPCBridge bridge = JSONRPCBridge.getGlobalBridge();
// 读取资源文件
for (String propFile : sce.getServletContext().getInitParameter(
CONFIGNAME).split(";")) {
try {
if (propFile.startsWith("classpath:")) {
properties.load(new BufferedInputStream(
new FileInputStream(new File(sce
.getServletContext().getRealPath(
"/WEB-INF/classes/")
+ "/" + propFile.substring(10)))));
} else {
properties.load(new BufferedInputStream(
new FileInputStream(new File(sce
.getServletContext().getRealPath("/")
+ propFile))));
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 分析资源文件,注册到全局bridge
for (Object key : properties.keySet()) {
String[] values = properties.getProperty(key.toString()).split(",");
if (values.length > 1) {
try {
bridge.registerObject(key, context.getBean(values[0]),
Class.forName(values[1]));
} catch (BeansException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} else {
bridge.registerObject(key, context.getBean(values[0]));
}
}
}
}
这样我就可以在一个属性文件中编辑我要暴露的业务逻辑bean名字以及我需要暴露的接口了.
接下来在面对store的时候发现没有提供用方法提供数据的store于是自己又写了一小小的自定义store:
RpcStore = function(c) {
RpcStore.superclass.constructor.call(this, Ext.apply(c, {
proxy : new RpcProxy({
rpcfn : c.rpcfn
}),
reader : new Ext.data.JsonReader(c, c.fields)
}));
};
Ext.extend(RpcStore, Ext.data.Store);
RpcProxy = function(c) {
RpcProxy.superclass.constructor.call(this);
this.rpcfn = c.rpcfn;
};
Ext.extend(RpcProxy, Ext.data.DataProxy, {
load : function(params, reader, callback, scope, arg) {
// params = params || {};
var result;
try {
if (Utils.hasProperty(params)) {
result = reader.readRecords(this.rpcfn(params));
}else{
result = reader.readRecords(this.rpcfn());
}
} catch (e) {
this.fireEvent("loadexception", this, arg, null, e);
callback.call(scope, null, arg, false);
return;
}
callback.call(scope, result, arg, true);
}
});
Utils = {};
Utils.hasProperty = function(o){
for(var p in o){
return true;
}
return false;
}
这样我在使用后台数据的时候只需要
store = new RpcStore({
rpcfn : jsonrpc.somebean.somemethod,
fields : ["somefield"]
});
store.load({params:{something:"something"}});
分享到:
相关推荐
本篇文章将探讨如何在Yii Framework中整合ExtJS Direct以实现RPC(Remote Procedure Call)通信。 首先,让我们了解RPC的概念。RPC允许客户端应用程序调用服务器上的方法就像调用本地方法一样,简化了客户端与...
总结来说,"GWT_2BEXT_2BSTRUTS2完整实例"是关于如何将这三个技术有效地整合在一起,构建一个完整的Web应用的示例。这个实例可能涵盖了GWT的客户端开发、EXT JS的富界面实现以及STRUTS2的服务器端处理,展示了它们...
Direct技术结合了JSONP(JSON with Padding)和RPC(Remote Procedure Call)的概念,使得客户端可以像调用本地方法一样调用远程服务。 1. **Ext.Direct**:Ext.Direct是Ext Js中的一个核心特性,它提供了一种标准...
- **Direct技术**:理解JSON-RPC和Ext Direct的工作原理,包括请求格式、响应处理以及如何在服务器端实现Direct服务。 - **Java Servlet和Filter**:Java Web开发的基础,用于处理HTTP请求和响应。 - **JSON**:...
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
2025年自动化仪表创业项目方案.docx
cmd-bat-批处理-脚本-Messagebox_Cancel_TryAgain_Ignore.zip
cmd-bat-批处理-脚本-GenerateUnionWinMD.zip
cmd-bat-批处理-脚本-shift.zip
电力系统潮流计算是电力工程领域的一项核心技术,主要用于分析电力网络在稳态运行条件下的电压、电流、功率分布等运行状态。MATLAB凭借其强大的数值计算功能和便捷的编程环境,成为电力系统潮流计算的重要工具,它提供了丰富的数学函数库,能够高效地处理复杂的电力系统计算任务。 本压缩包中的“潮流计算MATLAB程序”是一套完整的电力系统潮流计算解决方案,主要包括以下几个关键部分: 数据输入模块:该模块负责读取电力系统的网络数据,包括发电机、线路、变压器等设备的参数。这些数据通常来源于IEEE测试系统或实际电网,并以特定格式存储。 网络建模:基于输入数据,程序构建电力系统的数学模型,主要涉及节点功率平衡方程的建立。每个节点的注入功率等于其消耗功率,对于发电机节点还需考虑其有功和无功功率的调节能力。 迭代算法:潮流计算的核心是求解非线性方程组,常见的算法有牛顿-拉夫森法和高斯-塞德尔法。MATLAB的优化工具箱可辅助实现这些算法,通过迭代更新节点电压和支路电流,直至满足收敛条件。 结果输出:计算完成后,程序能够输出关键性能指标,如节点电压幅值和相角、支路功率流、发电机的有功无功功率等。这些信息对于分析电网运行状态和制定调度策略具有重要意义。 可视化功能:程序可能包含图形用户界面(GUI),用于展示计算结果,例如绘制网络拓扑图并标注节点电压和支路功率,便于用户直观理解计算结果。 错误处理与调试:良好的程序设计应包含错误检测和处理机制,以应对不合理数据或计算过程中出现的问题,并给出适当的提示。 对于电力系统分析课程的学生来说,这个MATLAB程序是一个宝贵的学习资源。它不仅有助于学生掌握电力系统的理论知识,还能让他们了解如何将理论应用于实践,通过MATLAB解决实际问题。尽管该程序是作者一周内完成的,可能存在一些未完善之处,但使用者可以在参考的基础上逐步改进和完善,使其更贴合自身需求。 总之
cmd-bat-批处理-脚本-updaterjs.zip
cmd-bat-批处理-脚本-fsharp.zip
内容概要:该论文深入研究了双馈感应发电机(DFIG)的频率耦合特性及其对系统稳定性的影响。传统阻抗分析方法将DFIG系统解耦为正序和负序子系统进行分析,但当系统中存在频率耦合时,这种线性假设可能导致错误的稳定性结论。论文重点分析了由PLL(锁相环)和不对称转子电流控制引起的频率耦合现象,建立了描述DFIG频率耦合特性的解析模型,并通过仿真验证了模型的有效性。基于该模型,论文进一步分析了系统稳定性及频率耦合的影响因素,表明阻抗分析方法相比传统特征值分析方法更具优势,即使无法建立解析模型,也可通过实验或仿真获得阻抗模型。此外,论文提供了详细的Python代码实现,包括DFIG参数定义、阻抗模型构建、稳定性分析及可视化结果。 适合人群:电力系统工程师、风电系统研究人员、高校电气工程专业师生等具有电力系统基础知识和一定编程能力的专业人士。 使用场景及目标:①用于理解和研究DFIG系统在风电场中的频率耦合特性;②帮助工程师和研究人员分析DFIG系统的稳定性,识别潜在的次同步振荡风险;③为实际风电系统的稳定性评估和优化提供理论依据和技术支持。 其他说明:该论文不仅提供了理论分析,还通过Python代码实现了完整的DFIG频率耦合建模和稳定性分析流程。
2025年职称计算机考试理论模拟试题及答案.docx
《全统计:CMU课程1-10章课后答案详解》是一份极具价值的学习资料,专为卡内基梅隆大学(CMU)“全统计”课程的前10章课后习题提供详尽的解题指导。该压缩包内含10个PDF文件,每个文件对应一章的详细解答,目的是助力学生深刻领会统计学的基础知识、核心理论与实际应用。 在第一章中,通常会讲解统计学的基本概念,例如样本与总体、参数估计、概率分布等。答案详解会涵盖如何计算平均值、中位数、众数,以及如何分析这些统计量之间的差异。同时,还会介绍随机变量和概率分布,如二项分布、正态分布等内容。 第二章主要涉及抽样分布理论,包括中心极限定理,这是统计推断的关键基础。答案详解会说明如何借助抽样分布开展假设检验,例如t检验和z检验。 第三章则深入探讨置信区间的构建以及假设检验的方法。答案详解会详细阐述如何确定置信水平,以及在不同情境下如何选择单尾或双尾检验。 第四章通常聚焦于线性回归模型,包括回归方程的建立、残差分析以及多重共线性问题。答案详解会展示如何解读回归系数,预测未知变量,并解释相关性的强度和方向。 第五章可能探讨非参数统计方法,这些方法不依赖于特定的分布假设,例如Kolmogorov-Smirnov检验、Mann-Whitney U检验等。答案详解会解释在数据分布未知时如何开展统计分析。 第六章将涉及单因素和多因素方差分析(ANOVA),用于比较不同组间的均值差异。答案详解会详细说明如何执行ANOVA,解释F统计量及其意义。 第七章可能涵盖实验设计的基本原则,包括随机化、复制和控制。答案详解会说明如何设计有效的实验以减少偏差,以及如何分析实验结果。 第八章可能涉及时间序列数据的特性,如趋势、季节性和周期性。答案详解会介绍ARIMA模型、自回归移动平均模型等,并解释如何预测未来趋势。 第九章可能深入到多元统计领域,包括多元线性回归、主成分分析、因子分析等。答案详解会介绍如何处理多维
提供一份MATLAB代码,采用Fox-Li迭代算法,只需复制粘贴到MATLAB软件中即可直接运行,非常便捷且精准。
cmd-bat-批处理-脚本-register_python.zip
cmd-bat-批处理-脚本-GetOSVersion.zip
基于GAN的视景图像超分辨率重 建方法研究.zip
极化码(Polar Code)是由土耳其科学家Erdal Arıkan在2009年提出的一种新型纠错编码技术。它通过利用信道的极化现象,将虚拟信道分为误码率接近0和接近1/2的两类。在编码设计中,数据被放置在误码率极低的信道上,从而实现高效的数据传输。极化码的主要优势在于其理论编码容量能够达到香农限,并且构造方法较为简单。 MATLAB是一种功能强大的数学计算和编程工具,广泛应用于科学研究和工程领域。在极化码的研究中,MATLAB可用于构建编码和解码算法,模拟数据在不同信道条件下的传输效果,验证理论性能,并优化相关参数。 SC(Successive Cancellation,逐位取消)译码是极化码的基本解码方法。它从最可靠的比特开始,依次解码每个虚拟信道,且每个比特的解码结果会影响后续比特的解码,因为它们之间存在依赖关系。虽然SC译码的实现较为简单,但其计算复杂度较高,随着码长的增加,解码时间会线性增长。 SCL(Successive Cancellation List,逐位取消列表)译码是SC译码的改进版本。它通过引入列表机制,同时处理多个路径,从而增强了错误校正能力,并在一定程度上降低了错误率。与SC译码相比,SCL译码虽然需要消耗更多的计算资源,但能够提供更好的性能。 一个完整的MATLAB仿真资源通常包含以下内容: 编码模块:用于实现极化码的生成,包括码字构造和极化矩阵操作等。 信道模型:用于模拟各种通信信道,例如AWGN(加性高斯白噪声)信道或衰落信道。 SC/SCL译码模块:包含SC译码和SCL译码的算法实现。 误码率(BER)计算:通过比较发送和接收的码字,计算误码率,以评估编码性能。 性能曲线绘制:绘制误码率与信噪比(SNR)之间的关系曲线,展示不同译码策略的性能差异。 使用说明:指导用户如何运行仿真,理解代码结构,以及如何调整参数以进行自定义实验。 代码注