- 浏览: 122165 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
roychenyi:
<br>1<br>2<br> ...
pager-taglib 使用说明 -
roychenyi:
<br>换行<br>换行<br& ...
pager-taglib 使用说明 -
wangwenfei1985:
[flash=200,200][url][img][list] ...
pager-taglib 使用说明 -
时光后19:
,看到你这样真好,
FileNet调用webService配置 -
ysen:
大sql导入mysql
如果是SQL格式的。有的可能上100 ...
mysqldump备份详解
业务场景:
用户去银行营业厅办理的业务时 需要在预处理机上面填写代办业务信息或者之前在 网上预约系统填写过就可以到柜员直接办理业务。
涉及到预处理机 和 网上预约系统 两个系统,如何在开发的时候同步它们共同的业务数据也就是页面可以提供开发效率。
以及在每个系统中提取公用页面比如 formEdit.jsp (填写页面)与formConfirm.jsp (显示页面)
以fromEdit.jsp为例:
在公用页面fromEdit.jsp页面加入jsp定义的标签<mct:form ,formConfig.template 没不同的页面模板,formObject不同模板的业务数据
<div class="centerdd" style="width:780px"> <div id="formContent1"> <c:if test="${!empty(formObject)}"> <mct:form formObject="${formObject}" template="${formConfig.template}"/> </c:if> </div> </div>
<mct:form 定义:
/** * 表单模板输入标签。该标签输出基于 FreeMarker 的模板。 * * */ public class FormTemplateTag extends TagSupport { /** * 表单对象 */ Object formObject; /** * 模板名称 */ String template; /** * */ private static final long serialVersionUID = 7318973001234606567L; public FormTemplateTag() { } public int doStartTag() { Configuration conf = new Configuration(); conf.setClassForTemplateLoading(FormTemplateTag.class, "/templates/"); try { Template t = conf.getTemplate(template, "UTF-8"); Map<String, Object> root = new HashMap<String, Object>(); Object tempFormObject = formObject; if (formObject instanceof String) { Object realObj = pageContext.getAttribute((String) formObject); tempFormObject = realObj; } if (!(tempFormObject instanceof FormContentObject)) throw new RuntimeException("Invalid form object: A FormContentObject is expected."); root.put("formObject", tempFormObject); root.put("environment", getEnvironment()); t.process(root, this.pageContext.getOut()); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } return Tag.SKIP_BODY; } //字典数据 private Object getEnvironment() { Map<String, Object> environment = new HashMap<String, Object>(); environment.put("currencyTypes", Constants.CURRENCY.entrySet()); environment.put("corporationTypes", Constants.CORPACCOUNTTYPE.entrySet()); environment.put("credentialTypes", Constants.CREDENTIALTYPE.entrySet()); environment.put("industries", Constants.INDUSTRYCLASSIFICATION.entrySet()); environment.put("corpAccountTypes", Constants.CORPACCOUNTTYPE.entrySet()); environment.put("nationality", Constants.NATIONALITY.entrySet()); return environment; } public Object getFormObject() { return formObject; } public void setFormObject(Object formObject) { this.formObject = formObject; } public String getTemplate() { return template; } public void setTemplate(String template) { this.template = template; } }
业务数据配置文件forms.xml:
<?xml version="1.0" encoding="UTF-8"?> <forms> <!-- ===================================== --> <!-- 对公业务表单定义 --> <!-- ===================================== --> <form name="corporationOpenAccount" productId="1" productType="对公"> <template state="edit" id="corporationOpenAccountEdit" name="对公结算账户开户" description="请输入您的对公账户开户信息" templatePath="corporation/openAccount/corporationOpenAccountEdit.html" formObjectCreator="com.ibm.banking.mct.form.ext.CorporationOpenAccountFormBuilder" /> <template state="confirm" id="corporationOpenAccountConfirm" name="对公结算账户开户" description="请确认您的对公账户开户信息" templatePath="corporation/openAccount/corporationOpenAccountConfirm.html" formObjectCreator="com.ibm.banking.mct.form.ext.CorporationOpenAccountFormBuilder" /> </form> <form name="corporationOnlineBankingApp" productId="111" productType="对公"> <template state="edit" id="corporationOnlineBankingAppEdit" name="对公网银开户申请单" description="请输入您的对公网银开户申请信息" templatePath="corporation/onlineBankingApp/corporationOnlineBankingAppEdit.html" formObjectCreator="com.ibm.banking.mct.form.ext.CorporationOnlineBankingAppFormBuilder" /> <template state="confirm" id="corporationOnlineBankingAppConfirm" name="对公网银开户申请单" description="请确认您的对公账户开户信息" templatePath="corporation/onlineBankingApp/corporationOnlineBankingAppConfirm.html" formObjectCreator="com.ibm.banking.mct.form.ext.CorporationOnlineBankingAppFormBuilder" /> </form> <!-- ===================================== --> <!-- 对私业务表单定义 --> <!-- ===================================== --> <form name="largeCashWithdrawal" productId="18" productType="对私"> <template state="edit" id="largeCashWithdrawalEdit" name="大额取现" description="请输入您的大额取现信息" templatePath="personal/largeCashWithdraw/largeCashWithdrawalEdit.html" formObjectCreator="com.ibm.banking.mct.form.ext.DefaultFormObjectBuilder" /> <template state="confirm" id="largeCashWithdrawalConfirm" name="大额取现" description="请确认您的大额取现信息" templatePath="personal/largeCashWithdraw/largeCashWithdrawalConfirm.html" formObjectCreator="com.ibm.banking.mct.form.ext.DefaultFormObjectBuilder" /> </form> <form name="onsiteTransfer" productId="177" productType="对私"> <template state="edit" id="onsiteTransferEdit" name="行内转账" description="请输入行内转账信息" templatePath="personal/onsiteTransfer/onsiteTransferEdit.html" formObjectCreator="com.ibm.banking.mct.form.ext.DefaultFormObjectBuilder" /> <template state="confirm" id="onsiteTransferConfirm" name="行内转账" description="请确认您行内转账信息" templatePath="personal/onsiteTransfer/onsiteTransferConfirm.html" formObjectCreator="com.ibm.banking.mct.form.ext.DefaultFormObjectBuilder" /> </form> <form name="personalOpenAccount" productId="137" productType="对私"> <template state="edit" id="personalOpenAccountEdit" name="个人账户开户及综合服务申请表" description="请输入您的开户信息" templatePath="personal/openAccount/personalOpenAccountEdit.html" formObjectCreator="com.ibm.banking.mct.form.ext.PersonalAccountOpenFormBuilder" /> <template state="confirm" id="personalOpenAccountConfirm" name="个人账户开户及综合服务申请表" description="请输入您的开户信息" templatePath="personal/openAccount/personalOpenAccountConfirm.html" formObjectCreator="com.ibm.banking.mct.form.ext.PersonalAccountOpenFormBuilder" /> </form> </forms>
业务构造设计:
/** * FormObjectBuilder 创建器,用于创建 FormContentObject * * * */ public interface FormObjectBuilder { /** * 创建出 FormContentObject * @return */ public FormContentObject create(); /** * 创建出 FormContentObject 并提供 Context * @param context * @return */ public FormContentObject create(Map<String, Object> context); }
public class DefaultFormObjectBuilder implements FormObjectBuilder { @Override public FormContentObject create() { FormContentObject object = new FormContentObject(); Field[] fields = FormContentObject.class.getDeclaredFields(); for (Field f : fields) { try { if (Modifier.isFinal(f.getModifiers())) continue; Class<?> fieldClass = f.getType(); Object value = fieldClass.newInstance(); f.setAccessible(true); f.set(object, value); } catch (Exception e) { System.err.println("Error when setting field: " + f.getName()); continue; } } return object; } @Override public FormContentObject create(Map<String, Object> context) { return create(); } }
public class CorporationOnlineBankingAppFormBuilder implements FormObjectBuilder { @Override public FormContentObject create() { FormContentObject object = new FormContentObject(); CorporationOnlineBankingAppForm form = new CorporationOnlineBankingAppForm(); object.setCorporationOnlineBankingAppForm(form); return object; } @Override public FormContentObject create(Map<String, Object> context) { CorporationCustomerInfo corporation = (CorporationCustomerInfo) context.get(ActionConstants.SESSION_CORPORATION_INFO); if (corporation != null) { FormContentObject object = new FormContentObject(); CorporationOnlineBankingAppForm form = BeanUtility.createAndMapping(CorporationOnlineBankingAppForm.class, corporation); object.setCorporationOnlineBankingAppForm(form); return object; } return create(); }
public class CorporationOpenAccountFormBuilder implements FormObjectBuilder { @Override public FormContentObject create() { FormContentObject object = new FormContentObject(); CorporateAccountOpenForm form = new CorporateAccountOpenForm(); object.setCorporateAccountOpenForm(form); return object; } @Override public FormContentObject create(Map<String, Object> context) { CorporationCustomerInfo corporation = (CorporationCustomerInfo) context.get(ActionConstants.SESSION_CORPORATION_INFO); if (corporation != null) { CorporateAccountOpenForm form = BeanUtility.createAndMapping(CorporateAccountOpenForm.class, corporation); FormContentObject object = new FormContentObject(); object.setCorporateAccountOpenForm(form); return object; } return create(); } }
初始化数据:
/** * 表单模板配置,规则如下: * * 每个表单被分配一个名字,如:corporationOpenAccount * 每个表单模板也有一个名字,如:corporationOpenAccountEdit * * 表单目前有两种状态,一种是编辑 (edit) 状态,一种是确认状态 (confirm) * 提取表单那模板时,需要提供表单名和状态作为参数,然后可以获取到某个具体的模板。 * * */ public class FormTemplateConfig { public static final String STATE_EDIT = "edit"; public static final String STATE_CONFIRM = "confirm"; String formId; String name; String productId; String productType; String description; String template; FormObjectBuilder formObjectBuilder; static Map<String, FormTemplateConfig> configs = new HashMap<String, FormTemplateConfig>(); static Map<String, Form> formConfigs = new HashMap<String, Form>(); static { InputStream is = FormTemplateConfig.class.getResourceAsStream("/forms.xml"); FormList formList = JAXBHelper.unmarshal(is, FormList.class); for (Form form: formList.getFormList()) { formConfigs.put(form.getProductId(), form); List<Template> templates = form.getTemplateList(); for (Template template: templates) { String templateKey = form.getName() + "_" + template.getState(); FormObjectBuilder builder = createFormObjectBuilder(template.getFormObjectCreator()); FormTemplateConfig config = new FormTemplateConfig( template.getId(), template.getName(), form.getProductId(), form.getProductType(), template.getDescription(), template.getTemplatePath(), builder ); configs.put(templateKey, config); } } } static { // //======================================================================== // // 对公业务表单定义 // //======================================================================== // // // // // 对公结算账户开户 // // // configs.put("corporationOpenAccount_edit", // new FormTemplateConfig( // "corporationOpenAccountEdit", // "对公结算账户开户", // "111", // "对公", // "请输入您的对公账户开户信息", // "corporation/openAccount/corporationOpenAccountEdit.html", // new CorporationOpenAccountFormBuilder())); // configs.put("corporationOpenAccount_confirm", // new FormTemplateConfig( // "corporationOpenAccountConfirm", // "对公结算账户开户", // "111", // "对公", // "请确认您的对公账户开户信息", // "corporation/openAccount/corporationOpenAccountConfirm.html", // new CorporationOpenAccountFormBuilder())); // // // // // 对公网银开户 // // // configs.put("corporationOnlineBankingApp_edit", // new FormTemplateConfig( // "corporationOnlineBankingAppEdit", // "对公网银开户申请单", // "111", // "对公", // "请输入您的对公网银开户申请信息", // "corporation/onlineBankingApp/corporationOnlineBankingAppEdit.html", // new CorporationOnlineBankingAppFormBuilder())); // configs.put("corporationOnlineBankingApp_confirm", // new FormTemplateConfig( // "corporationOnlineBankingAppConfirm", // "对公网银开户申请单", // "111", // "对公", // "请确认您的对公网银开户申请信息", // "corporation/onlineBankingApp/corporationOnlineBankingAppConfirm.html", // new CorporationOnlineBankingAppFormBuilder())); // // //======================================================================== // // 对私业务表单定义 // //======================================================================== // // // // // 大额取现 // // // configs.put("largeCashWithdrawal_confirm", // new FormTemplateConfig( // "largeCashWithdrawalConfirm", // "大额取现", // "111", // "对私", // "请确认您的大额取现信息", // "personal/largeCashWithdraw/largeCashWithdrawalConfirm.html", // new DefaultFormObjectBuilder())); // configs.put("largeCashWithdrawal_edit", // new FormTemplateConfig( // "largeCashWithdrawalEdit", // "大额取现", // "111", // "对私", // "请输入您的大额取现信息", // "personal/largeCashWithdraw/largeCashWithdrawalEdit.html", // new DefaultFormObjectBuilder())); // // // // // 行内转账 // // // configs.put("onsiteTransfer_confirm", // new FormTemplateConfig( // "onsiteTransferConfirm", // "行内转账", // "111", // "对私", // "请确认您行内转账信息", // "personal/onsiteTransfer/onsiteTransferConfirm.html", // new DefaultFormObjectBuilder())); // configs.put("onsiteTransfer_edit", // new FormTemplateConfig( // "onsiteTransferEdit", // "行内转账", // "111", // "对私", // "请输入您的行内转账信息", // "personal/onsiteTransfer/onsiteTransferEdit.html", // new DefaultFormObjectBuilder() )); // // // // // 个人账户开户及综合服务申请表 // // // configs.put("personalOpenAccount_edit", // new FormTemplateConfig( // "personalOpenAccountEdit", // "个人账户开户及综合服务申请表", // "111", // "对私", // "请输入您的开户信息", // "personal/openAccount/personalOpenAccountEdit.html", // new PersonalAccountOpenFormBuilder() )); // configs.put("personalOpenAccount_confirm", // new FormTemplateConfig( // "personalOpenAccountConfirm", // "个人账户开户及综合服务申请表", // "111", // "对私", // "请输入您的开户信息", // "personal/openAccount/personalOpenAccountConfirm.html", // new PersonalAccountOpenFormBuilder() )); } /** * 根据表单ID和表单状态获取表单模板配置 * @param formId * @param formState * @return */ public static FormTemplateConfig getConfig(String formId, String formState) { return configs.get(formId + "_" + formState); } /** * 根据产品 ID 获取 Form 配置 * @param productId * @return */ public static Form getForm(String productId) { return formConfigs.get(productId); } /** * 根据产品ID 获取 Form 名 * @param productId * @return */ public static String getFormName(String productId) { Form form = getForm(productId); if (form == null) throw new RuntimeException("No form is found for product id: " + productId); return form.getName(); } @SuppressWarnings("unchecked") private static FormObjectBuilder createFormObjectBuilder(String formObjectCreatorClassName) { try { Class<FormObjectBuilder> builderClass = (Class<FormObjectBuilder>) Class.forName(formObjectCreatorClassName); return builderClass.newInstance(); } catch (Throwable e) { e.printStackTrace(); return new DefaultFormObjectBuilder(); } } FormTemplateConfig(String formId, String name, String productId, String productType, String description, String template, FormObjectBuilder builder) { this.formId = formId; this.name = name; this.productId = productId; this.productType = productType; this.description = description; this.template = template; this.formObjectBuilder = builder; } public String getFormId() { return formId; } public void setFormId(String formId) { this.formId = formId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getTemplate() { return template; } public void setTemplate(String template) { this.template = template; } public String getProductId() { return productId; } public void setProductId(String productId) { this.productId = productId; } public FormObjectBuilder getFormObjectBuilder() { return formObjectBuilder; } public void setFormObjectBuilder(FormObjectBuilder formObjectBuilder) { this.formObjectBuilder = formObjectBuilder; } public String getProductType() { return productType; } public void setProductType(String productType) { this.productType = productType; } public static void main(String[] args) throws IOException { InputStream is = FormTemplateConfig.class.getResourceAsStream("/forms.xml"); System.out.println(is); if (is == null) throw new RuntimeException("No resource is found."); // ByteArrayOutputStream out = new ByteArrayOutputStream(); // int count = 0; // byte[] buf = new byte[1024]; // while (count >=0) // { // count = is.read(buf); // if (count > 0) out.write(buf, 0, count); // } // System.out.println(out.toString()); // // is.reset(); FormList forms = JAXBHelper.unmarshal(is, FormList.class); System.out.println(forms.getFormList().size()); } }
发表评论
-
email 发送接口
2012-02-29 17:48 1526企业邮件发送有自己的发送平台,其它系统包括业务系统常常将发送邮 ... -
jspSmartUpload
2010-06-16 14:57 1386package cn.com.hena ... -
在Web应用中使用FreeMarker生成html页面
2010-04-11 17:40 3670在Web应用中使用FreeMarker跟在Java程 ... -
freeMarker in web
2010-04-08 19:27 1332一 加入 freemarker.jar 包 二 在需要 ... -
freeMarker_01
2010-04-08 18:58 1214FreeMarker 入门实例 pu ... -
pager-taglib 使用说明
2010-03-28 14:33 133271、拷贝pager-taglib.jar包2、在JSP页面中使 ...
相关推荐
通过本文的介绍,我们可以了解到,在Windows 8系统中,用户不仅可以方便地查看已经安装的应用程序,还可以轻松实现在不同设备之间的应用同步。这一功能极大地提高了用户的便利性和体验度,特别是在用户拥有多个Win8...
而该插件的出现,使得网站管理员可以在一个平台上操作,即可实现内容在多个终端上的同步发布,大大提高了工作效率。 “帝国CMS移动端多端同步生成插件”支持帝国CMS的7.2和7.5两个版本,这意味着它具备广泛的兼容性...
1. **实时数据同步**:使用Ajax,CRM系统可以在用户填写表单或进行其他操作时,即时向服务器发送请求并获取反馈,无需刷新整个页面,提高了用户体验。 2. **动态表格和图表**:通过Ajax,可以实现在不重新加载页面...
同步是指在多个设备或系统之间保持数据一致性的过程,确保所有参与者都能访问到最新、最准确的信息。下面我们将深入探讨这个主题,了解其背后的原理和实现方法。 首先,服务器页面通常指的是Web服务器上运行的动态...
在实际项目中,应根据具体需求和系统性能灵活选择同步等待策略,以提高测试效率并减少错误。同时,需要注意的是,过度依赖等待可能导致测试用例执行时间过长,因此在确保测试准确性的同时,也需考虑优化脚本,减少...
在这个课程设计中,我们将聚焦于操作系统中的三个关键调度算法:磁盘调度、进程调度和页面置换,这些都是操作系统管理资源的重要手段。 首先,磁盘调度算法在操作系统中扮演着关键角色,它的主要任务是决定硬盘读写...
DFS-R则负责在多个DFS服务器之间复制和同步文件,确保数据的一致性和冗余。 在实际应用中,微软DFS可以用来构建一个企业大文件传输和共享系统,解决跨广域网传输大文件时遇到的问题,如网络拥堵、低传输速度和安全...
在实际应用中,这些静态页面可能需要与后端服务器通过API接口进行交互,以实现数据的增删改查和状态更新。开发者可以使用AJAX或者Fetch API来实现无刷新的数据同步,提供更加流畅的用户体验。此外,为了保证安全性,...
在本系统中,系统的首页、用户注册界面、论坛版块的信息添加、课程播放页面、作业提交界面等都是通过Java语言和相关技术实现的。 基于Java远程同步课堂系统设计与实现涉及到多个技术领域,需要对系统的需求设计、...
进程同步是指多个进程在执行过程中,按照一定的规则协调它们的执行。这个实验通常会用到经典的同步问题,如理发店问题或银行家算法,以模拟并发环境下的资源分配和调度。学生会学习如何使用信号量、条件变量等同步...
在信息化飞速发展的今天,网站的多终端兼容性和内容同步成为了网站管理中的重要课题。帝国CMS作为一个强大的内容管理系统,为了解决这一问题,特别开发了“移动端同步生成的插件510404.zip”。此插件的出现,使得...
在这个“node+js页面乐观锁帧同步示例源码”中,我们可以看到一个结合Node.js和JavaScript实现的乐观锁应用。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让开发者可以使用JavaScript在服务器端编写代码...
在大型多页面应用中,页面路由是必不可少的组成部分,AngularJs提供了强大的路由管理功能。 - **依赖引入**:首先需要引入`ngRoute.js`和添加`ngRoute`模块。 - **配置路由**:通过`ngRouteProvider`配置路由规则,...
操作系统是计算机系统的核心组成部分,负责管理和控制系统的硬件资源,以及为用户提供友好的...在实际应用中,操作系统设计者往往需要根据具体场景和需求,灵活选择或组合不同的调度和置换策略,以达到最佳的系统性能。
### AJAX在Web系统中的应用实践 #### 引言:AJAX——革新Web应用体验的关键技术 随着互联网技术的不断进步,用户体验成为了评价Web应用的重要标准之一。传统的Web应用基于同步交互模式,用户发起请求后必须等待...
"同步"是指在多个设备或系统之间保持数据的一致性。在本场景中,可能涉及到数据库更新、文件传输或其他形式的数据交换。后台同步意味着这些操作在后台线程执行,不会阻塞用户的交互,提高了系统的响应速度。 "前台...
在多地点同步的场景下,Access的数据表可能需要在不同位置保持一致。 3. **数据库同步**:数据库同步是指确保在不同地点或系统的数据库之间数据的一致性。这通常通过比较并更新差异来实现。在Access数据库的同步...
多媒体应用系统创作技术涉及到了软件开发、系统设计和内容创作等多个层面,是数字时代中不可或缺的一部分。这一领域的技术主要用于创建集图像、文字、音频和视频于一体的互动式应用,广泛应用于教育、娱乐、商业等...
Ajax技术是当前Web应用系统中的一种革命性技术,能够实现异步数据交换和局部页面刷新,解决传统Web应用系统中的同步请求数据和页面刷新问题。Ajax技术的出现使得Web应用程序的用户体验大大提高,提高了系统的响应...
在Linux中,我们首先会接触到操作系统的基本概念,包括进程管理、内存管理、文件系统、设备管理和调度算法。这些是操作系统设计的关键部分,理解和掌握它们对于深入理解Linux系统至关重要。 **进程管理**:在Linux...