Sword框架解析——知识采集流程页面初始化

声明:目前因为是初学者小白,现阶段不去考虑架构底层的东西,比如:BaseZrarBlh类是如何通过factory创建;框架是如何将spring、spring mvc、hibernate封装的;一些具体的基础组件是额如何封装的,这个后续再去讨论和研究,目前现阶段,是了解清楚他的用法,清楚的展现出来,说明他是怎么用的即可。

问题解答流程——采集新增页面初始化

1.1后台t_xt_gnzy表和BLH类

正式开始,以模仿问题解答采集流程为例:

先在t_xt_gnzy表中添加一个问题解答采集的模仿数据,这个表主要存放的是页面左边的菜单栏的数据,后续这些数据会通过封装在框架中的特定方法去调用后台对应的java类的特定方法去跳转页面。

 
图1 .1.1 系统页面菜单栏展示

 
图1.1.2 oracle数据库t_xt_gnzy表存放的菜单栏数据信息

跳转的关键就在于URL里面存储的sword?tid=ZskwtwhnewBLH_toZskwtwhNewTree&wtwhlx=zscj这种数据。我们可以发现,在前端数据传递到后台处理的时候,也是类似的用法,其中也包括我们经常用的ajax,框架的ajax也是经过特殊封装的,但是原理是一样的。

在数据库中存放的url,后续会通过框架中的特有方式执行:

 
图1.1.3 t_xt_gnzy中的url

sword?tid=ZskwtwhnewBLH_toZskwtwhNewTree&wtwhlx=zscj

以“_”作为分界线: 
前面的地址是后台BLH类的唯一标识符,在本例中是:ZskwtwhnewBLH

后面的部分,到&之前,是对应类的方法名的唯一标示符,在本例中是:toZskwtwhNewTree

&之后,是我们需要向后台传值的部分,在本例中,传递了一个名叫“wtwhlx”的值,具体值是:zscj,一般在这里传递的值,都是用来控制页面展示的一些参数

1.2BLH类的写法&前台目录树代码

(1)BLH类 
前面我们提到了,在数据库中的url包含了两个【唯一标识符】的问题

@BLH("ZskwtwhnewBLH")
public class ZskwtwhnewBLH extends BaseZrarBlh {
private static final String WtwhVO_Form = "wtwhFormID";
private static final String WtwhVO_Grid = "wtwhGridID"; //问题维护初始化页面跳转
public IResData toZskwtwhNewTree(IReqData req){ IResData res=new SwordRes();
//判断树页面右边加载的iframe类型
String wtwhlx=(String)req.getAttr("wtwhlx");
res.addJSTL("wtwhlx", wtwhlx); if("zscj".equals(wtwhlx)){
res.addJSTL("scrolling", "no");
}else{
res.addJSTL("scrolling", "yes");
} res.addPage("zrarpages/main/zsk/zlwh/wtwh_new_tree.jsp"); return res;
}

代码段1.2.1 ZskwtwhnewBLH类

表中sword?tid=ZskwtwhnewBLH_toZskwtwhNewTree&wtwhlx=zscj

1.ZskwtwhnewBLH对应代码中的注解@BLH("ZskwtwhnewBLH"),这两个地方要写得一模一样,具体原理不解释,是sword框架封装之后所实现的效果。

2.toZskwtwhNewTree是对应@BLH("ZskwtwhnewBLH")这个注解所在的类下面的toZskwtwhNewTree方法

3&wtwhlx=zscj传递了wtwhlx的值,这个值决定了传递到页面的scrolling值是no还是yes,在这里,我们得到wtwhlx的值是zjcs,所以传递到页面的scrolling值是no。

(2)前台目录树

核心代码块如下:

    <body class="body_bq">
<div class="div_bq">
<div class="pad_8" id="ie6_wid">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="shu_2">
<div class="tree_td_div"><span><%=ZskConstants.ZSK_ZLFLAG_WT_NAME %></span></div>
<div sword='SwordTree' id="SwordTreeWT" name="zskTree"
onCreateNode="createNode()" tid="ZskTreeBLH_zskInitTree?zltype=wtjd"
ltid="ZskTreeBLH_zskLoadTree"
onNodeClick="zsk_redirectURL('<c:out value="${wtwhlx }"/>','<c:out value="${ zlcode}"/>',
'<c:out value="${ zltypemc}"/>')" lazyLayer="2" laztTime="200"></div>
</td>
<td style="width:8px;"></td>
<td valign='top' id="main">
<iframe frameborder="0" width="100%" name="viewView" id="viewView"
scrolling='<c:out value="${scrolling}"/>'></iframe>
</td> </tr>
</table>
</div>
</div>
</body>

代码段1.2.2 wtwh_new_tree.jsp 查询左侧目录树

1.我们可以发现,在这句代码中:

<div sword='SwordTree' id="SwordTreeWT" name="zskTree"      onCreateNode="createNode()" tid="ZskTreeBLH_zskInitTree?zltype=wtjd"    ltid="ZskTreeBLH_zskLoadTree"
onNodeClick="zsk_redirectURL('<c:out value="${wtwhlx }"/>','<c:out value="${ zlcode}"/>',
'<c:out value="${ zltypemc}"/>')" lazyLayer="2" laztTime="200"></div>`

 
tid="ZskTreeBLH_zskInitTree?zltype=wtjd" 
ltid="ZskTreeBLH_zskLoadTree" 
的方法去调用java类的相关方法。

 
框架封装的createNode();zsk_redirectURL(...,...,...) 
的方法实现目录树的使用。

2.知道上述功能即可,具体目录树如何实现的相关代码不做进一步深入

1.3登录系统开启权限

在t_xt_gnzy中添加了数据之后,我们会发现在页面的【知识采集】菜单栏中点开,并没有出现我们自定义的【问题解答】菜单,这是因为sword系统的权限过滤和我之前做的系统的权限过滤是不同的:

之前不管是scm系统也好,自行车项目也好,权限过滤模块的设计是,账户登录之后可以看到所有的模块,对于自己没有权限的模块,可以看见,但是没有办法编辑。

而现在的sword系统是:对于账户没有开通的权限部分,在菜单栏里面是不会展示出来的。

那么,为了让我们添加的新菜单能够展示出来,我们需要按照图示的路径去开通【问题解答】模块的权限:

 
图1.3.1 权限管理页面

在下图中,开启【问题解答】权限:

 
图1.3.2 开启【问题解答】权限

开启权限之后,用具备该权限的账号去登录系统-【知识管理】-【知识采集】 
页面中就可以看到【问题解答】模块了:

 
图1.3.3 问题采集模块

1.4页面树&iframe加载

(1)页面树 
当我们写好了后台和前台页面之后,点击问题解答,将出现下述页面, 
前台只显示左侧的目录树:

 
图1.4.1 页面测试 
(2)iframe加载 
核心代码如下:

//初始化加载iframe的页面。对于zltypemc参数,1.知识采集待办传"zlcjdb" 2.首页采集待办传"cjdb"3.维护列表传"wh"
//根据后台传过来的数据,根据不同的业务类别,去加载相应的【自增】【维护】【审批】页面
function zsk_reloadView(wtwhlx,zlcode,zltypemc,ywlb){ if(wtwhlx=="zscj"){
document.getElementById("viewView").src="sword?tid=ZskwtwhBLH_zskwtwhAdd&zltype=<%=ZskConstants.ZSK_ZLFLAG_WT %>"
}else if(wtwhlx=="modify"){
document.getElementById("viewView").src="sword?tid=ZskwtwhBLH_zskwtwhModify&zlcode="+zlcode+"&cjdb="+zltypemc+"&ywlb="+ywlb; }else if(wtwhlx=="glwzadd"||wtwhlx=="glwzmodify"){
document.getElemenetById("viewView").src="sword?tid=ZskZhcxBLH_zhcxInit&zlflag2&zltype=2&glzltype="+zlcode+"&glzltypemc="+encodeURI(zltypemc)+"&whlx="+wtwhlx+"&ywlb="+ywlb;
}else{
document.getElementById("viewView").src="sword?tid=ZskwtwhBLH_zskwtwhFindList&zltype=<%=ZskConstants.ZSK_ZLFLAG_WT %>"
}
}
//自动题解iframe高度——设置页面的高度
function setHeight(){
var h=parent.zsk_getH();
$('viewView').setStyle('height',h-18);
$('SwordTreeWT').set('height',h-45+"px"); }

代码块1.4.1 ifarme加载


<div Sword="PageInit" onBefore="setHeight()" onFinish="zsk_reloadView('<c:out value="${wtwhlx}"/>','<c:out value="${zlcode}"/>','<c:out value="${zltypemc}"/>')".'<c:out value="${ ywlb}"/>')"></div>

代码块1.4.2 jsp页面加载完成后执行

这里的jsp代码段,表达在页面加载之前,执行setHeight()方法,用于设置页面高度 
在页面加载完成之后执行zsk_reloadView()方法用于调用后台java代码查询相关数据、返回页面内容,放到wtwh_new_tree.jsp页面的id为viewView的ifame里面作为内容展示出来。

(3) BLH新增问题跳转zskwtwhAdd&wtwh_add.jsp

详细代码这里不做进一步详解。

测试之后,会得到如图所示的页面: 
 
图1.4.2 问题解答采集新增页面的形成过程

Sword框架解析——知识采集流程页面初始化的更多相关文章

  1. SpringMVC源码解析-DispatcherServlet启动流程和初始化

    在使用springmvc框架,会在web.xml文件配置一个DispatcherServlet,这正是web容器开始初始化,同时会在建立自己的上下文来持有SpringMVC的bean对象. 先从Dis ...

  2. SpringBoot框架——从SpringBoot看IoC容器初始化流程之方法分析

    目录 一.概观Spring Boot 二.Spring Boot应用初始化 2.1 初始化入口 2.2 SpringApplication的run方法 2.3 方法分析 三.容器创建与初始化 3.1 ...

  3. iScroll框架解析——Android 设备页面内 div(容器,非页面)overflow:scroll; 失效解决(转)

    移动平台的活,兼容问题超多,今儿又遇到一个.客户要求在弹出层容器内显示内容,但内容条数过多,容器显示滚动条.按说是So easy,容器设死宽.高,CSS加属性 overflow:scroll; -we ...

  4. SSH三大框架的知识题

    Struts 谈谈你对Struts的理解. 答: 1.struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是Act ...

  5. [转载]iOS 10 UserNotifications 框架解析

    活久见的重构 - iOS 10 UserNotifications 框架解析 TL;DR iOS 10 中以前杂乱的和通知相关的 API 都被统一了,现在开发者可以使用独立的 UserNotifica ...

  6. iOS 10 UserNotifications 框架解析

    摘自:https://onevcat.com/2016/08/notification/ iOS 10 中以前杂乱的和通知相关的 API 都被统一了,现在开发者可以使用独立的 UserNotifica ...

  7. 实践开发:vue框架重点知识分析

    一个VUE项目的主树: assets文件夹是放静态资源: components是放组件: router是定义路由相关的配置; view视图: app.vue是一个应用主组件: main.js是入口文件 ...

  8. (一)FlexViewer之整体框架解析

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.FlexViewer简介 FlexViewer框架为Esri提供的 ...

  9. Scrapy爬虫框架解析

    Scrapy框架解析 Scrapy框架大致包括以下几个组件:Scrapy Engine.Spiders.Scheduler.Item Pipeline.Downloader: 组件 Scrapy En ...

随机推荐

  1. [BZOJ5361]/[HDU6291]对称数

    [BZOJ5361]/[HDU6291]对称数 题目大意: 一个\(n(n\le2\times10^5)\)个结点的树,每个结点有一个权值\(a_i(a_i\le2\times10^5)\),\(m( ...

  2. struts2漏洞S2-046修复解决方案

    项目验收通过半年之后, 甲方找了一些网络砖家用工具扫描我司做的社保卡申领系统, 找到了struts2漏洞S2-046, 真是服了, 只知道struts2有bug, 现在才知道它漏洞. 砖家们给出了修复 ...

  3. tarjan算法+缩点--cojs 908. 校园网

    cojs 908. 校园网 ★★   输入文件:schlnet.in   输出文件:schlnet.out   简单对比时间限制:1 s   内存限制:128 MB USACO/schlnet(译 b ...

  4. POJ 2482 Stars in Your Window 线段树

    如果按一般的思路来想,去求窗户能框住的星星,就很难想出来. 如果换一个思路,找出每颗星星能被哪些窗户框住,这题就变得非常简单了. 不妨以每个窗户的中心代表每个窗户,那么每颗星星所对应的窗户的范围即以其 ...

  5. 一次经典的tcp三次握手

    TCP报头 在三次握手中使用的字段: 32位序列号 seq:表示的是本次报文发送的数据的第一个字节的序号. 32位确认号:ack  表示期望下一次应该接受到的报文的第一个字节的序号,若ack = N则 ...

  6. hihocoder1320 160周 压缩字符串

    hihocoder1320 题目链接 思路: dp解法.用map[i][j]表示从第i个开始到第j个的字串的best压缩长度.(包括i,j,两端闭合). 用k表示i,j中的一点. 用zip()表示压缩 ...

  7. C#中&和&&,|和||区别

    当两者都为逻辑运算符时. 其实没什么差别. &&和||当已经确定结果时,不会对第二个操作数求值.也不知道什么情况会用到这个差别.做个笔记好了. http://blog.csdn.net ...

  8. Java之多线程 Semaphore(信号量)

    一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者. ...

  9. jquery 常用获取值得方法汇总

    jquery取radio单选按钮的值$("input[name='items']:checked").val();jquery radio取值,checkbox取值,select取 ...

  10. 开发Google Material Design风格的WPF程序

    今天在网上看到了一个Material Design风格的WPF皮肤,看上去还是挺不错的 这个项目是开源的,感兴趣的朋友可以下载试下: https://github.com/ButchersBoy/Ma ...