记录下自己在理解新项目时的思路,以便日后修改和整理

记录下自己在理解新项目时的思路,以便日后修改和整理:

项目使用G4Studio+Struts+Spring+iBatis+Extjs+Oracle等技术。


理解代码顺序:由JSP-->JS-->action-->service--->dto--->sqlmap--->oracle。

以其中一个功能:移动LTE手机助手举例。

第一步:通过IE浏览器访问应用。右击查看页面属性。获取http请求的URL地址,如:http://localhost:8080/buss/ltehelper.ered?reqCode=ltehelperInit&menuid4Log=012201

             这是点击LTE助手菜单后,页面请求URL地址。

第二步:根据URL地址,与Struts的配置文件匹配,由于Struts的配置文件分了多个配置文件。该功能使用的是struts-config-buss.xml。因此在该配置文件中找到<action>标签中path属性为ltehelper的配置: 

 <action name="commonActionForm" path="/ltehelper" scope="request" validate="false" parameter="reqCode" type="zj.chinamobile.brace.buss.phoneborrow.web

.LtehelperAction">

<forward name="ltehelperView" path="/phoneborrow/ltehelper.jsp" />

 </action>

找到配置后找到该功能的Action文件,也就是action标签中type属性的值zj.chinamobile.brace.buss.phoneborrow.web.LtehelperAction。

第三步:将请求交给action处理,该action继承BaseAction,BaseAction继承DispatherAction.相应的action获得相应的service实现。

private LtehelperService ltehelperService = (LtehelperService) getService("ltehelperService");service需要在Spring的配置文件app.service.xml注册。Spring配置文件中注册的bean标签的id就是相应的service,实现则是class属性的值zj.chinamobile.brace.buss.phoneborrow.service.imp.LtehelperServiceImpl。LtehelperService继承G4Studion的BizService,将操作进行dto封装,

如LtehelperService插入 public Dto save(Dto pDto);

实现类LtehelperServiceImpl实现save方法,参数是sqlmap配置中的命名空间.操作的id。第二个参数为service的dto。

public Dto save(Dto pDto) {
  appDao.insert("Ltehelper.insertLtehelper",pDto);
  return null;
 }。实现调用service的dto

 <!-- 移动lte助手 -->
 <bean id="ltehelperService" parent="baseTransactionProxyApp">
  <property name="target">
   <bean class="zj.chinamobile.brace.buss.phoneborrow.service.imp.LtehelperServiceImpl">
    <property name="appDao" ref="appDao" />
   </bean>
  </property>
 </bean>

在执行action的时候还会转发,相应的action执行URL中reqCode请求的方法ltehelperInit方法。在.LtehelperAction中找到该方法。该方法的实现通过session获取用户ID,帐号和部门,如果有则返回,没有则创建一个。使用request的setAttribute的方法,将用户信息放到request中。使用return mapping.findForward("ltehelperView");转到到struts-config-buss.xml中<forward>标签中name=ltehelperView对应的path的/phoneborrow/ltehelper.jsp页面。

/**
  * 初始化页面
  */
 public ActionForward ltehelperInit(ActionMapping mapping, ActionForm form, HttpServletRequest request,
   HttpServletResponse response) throws Exception {
  String userid = super.getSessionContainer(request).getUserInfo().getUserid();
  String account = super.getSessionContainer(request).getUserInfo().getAccount();
  String deptid = super.getSessionContainer(request).getUserInfo().getDeptid();
  request.setAttribute("userid", userid);
  request.setAttribute("account", account);
  request.setAttribute("deptid", deptid);
  return mapping.findForward("ltehelperView");
 }

第四步:找到phoneborrow路径下的ltehelper.jsp,在该JSP中引入对应的js文件。

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ include file="/common/include/taglib.jsp"%>
<eRedG4:html title="移动LTE助手" uxEnabled="true">
<eRedG4:import src="/buss/phoneborrow/js/ltehelper.js" />
<eRedG4:ext.myux uxType="datatimefield"/>
<eRedG4:ext.myux uxType="monthpicker"/>
<eRedG4:body>
<eRedG4:script>
   var userid = '<eRedG4:out key="userid" scope="request"/>';
   var account = '<eRedG4:out key="account" scope="request"/>';
   var deptid = '<eRedG4:out key="deptid" scope="request"/>';
</eRedG4:script>
</eRedG4:body>
</eRedG4:html>

该JS为<eRedG4:import src="/buss/phoneborrow/js/ltehelper.js" />


第五步:执行/buss/phoneborrow/js/ltehelper.js。该JS使用EXTJS3.1。

js中的数据通过url : 'sale.ered?reqCode=queryCountyList'再次去struts-config-buss.xml中查找,找到action标签的path值为sale的配置。

var qu_city = new Ext.data.Store({
  // 获取数据的方式
  proxy : new Ext.data.HttpProxy({
     url : 'sale.ered?reqCode=queryCountyList'
    }),
  reader : new Ext.data.JsonReader({}, [{ name : 'value' } ,{ name : 'text' } ]
    )
 });
 qu_city.load(); 


<action name="commonActionForm" path="/sale" scope="request" validate="false" parameter="reqCode" type="zj.chinamobile.brace.buss.phoneborrow.web.AppSaleAction">
   <forward name="manageNormalSaleView" path="/phoneborrow/sale.jsp" />
  </action>

该请求执行的是zj.chinamobile.brace.buss.phoneborrow.web.AppSaleAction。方法是reqCode=queryCountyList的方法,也就是AppSaleAction中的queryCountyList方法。返回的值在load();的时候返回ActionFoward。在当页返回值。该方法使用CommonActionForm的getParamDto(request)方法,获取dto。也就把request中的信息赋给了dto.dto是iBatis进行的封装。调用appReader的queryForList方法,参数是sqlMap中的命名空间AppSale对应的操作的Id。这样就进行和数据库的交互。返回一个list,再将返回的list的值转化成json数据。通过super.write(jsonString,response)给相应。将数据返回给页面。

 public ActionForward queryCountyList(ActionMapping mapping, ActionForm form, HttpServletRequest request,
   HttpServletResponse response) throws Exception {
  CommonActionForm aForm = (CommonActionForm) form;
  Dto dto = aForm.getParamAsDto(request);
  List list = appReader.queryForList("AppSale.queryCountyList", dto);
  String jsonString = JsonHelper.encodeObject2Json(list);
  super.write(jsonString, response);
  return mapping.findForward(null);

注:JS中,不同的操作对应不同的sqlmap的配置。执行不同的事物处理。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值