一.javashop增删改查操作流程
1.前台:
(1).相应位置增加弹窗按钮
(2).主页面的js中编写相应脚本
a.将id,name传给map对象,其中
"href":弹窗填充表单的跳转方法action
"formId":弹窗填充表单的id
"url":弹窗上保存按钮对应的action
"title":弹窗上方显示文字
b.将map对象放入弹窗并设置弹窗的尺寸等参数
c."保存"按钮的js实现
savebtn.linkbutton("disable")是指将按钮设置为不激活状态
d.最终以ajax方式提交表单内容
$(map["formId"]).ajaxSubmit("options");
f.时间戳转换为当前时间:<@dateformat time="${(articlea.add_time)}" pattern="yyyy-MM-dd"/>
2.后台
(1)acton
[email protected]({
name="commission_list",type="freemarker",location="/b2b2c/admin/store/commission_list.html"})
↑ ↑
return的值 return值对应的html路径
[email protected]("commission")
map["href"] = "commission!edit.do?id="+id
方法访问代码中感叹号前的内容
(2)Manager
action中调用方法接口的实现类,封装各种与数据库交互的方法实现,主要用daoSupport中的方法。
(3)IManager
action中调用的方法接口
2.首页
(1)左侧分类栏
a.index页面发起请求后,通过GoodsCatTag类中的方法查询商品分类信息
b.index页面调用reception_header页面输出首页头部标签, ————<#include ‘common/reception_header.html‘/>
reception_header页面调用nav_menu页面 ————<#include ‘nav_menu.html‘/>
c.nav_menu页面加入freemaker标签代码调取后台GoodsCatTag查询结果
<!-- 创建菜单标签 -->
<#assign goodsCatTag= newTag("goodsCatTag")>
<!-- 调用商品分类信息 -->
<#assign goodsCat = goodsCatTag()!‘‘ >
d.用list标签遍历查询结果到页面
<#list goodsCat.cat_tree as cat >
<li class="f14 com1_w" cat_id="${cat_index+1}">
<div class="bnav_w">
<a href="${ctx}/goods_list.html?cat=${cat.cat_id}">${cat.name}</a>
</div>
</li>
</#list>
其中,goodCat.cat_tree指GoodsCatTag类中的 List<Cat> cat_tree = goodsCatManager.listAllChildren(parentid);
================================================================================================================================
2.首页响应流程
(1)左侧所有商品分类部分
<1>.index.html页面中引用了reception_header.html页面,此页面中的
<#assign goodsCatTag= newTag("goodsCatTag")>声明了一个goodsCatTag= 标签,又通过
<#assign goodsCat = goodsCatTag()!‘‘ >引用了goodsCatTag标签,此时,freemaker会将参数传递给后台,而此时需要获取父级分类,故传入空字符串,
由后台if条件语句判断后取得parentid=0的参数,并最终获取一个json格式的数据传递给前台,具体获取流程与以下二级分类相同。
<1>.index.html页面中的<#assign goodsCatTag= newTag("goodsCatTag")>声明了一个goodsCatTag= 标签,当标签被引用时,freemaker会将参数传递给后台,
即,<#assign goodsCat = goodsCatTag("‘parentid‘:38,‘catimage‘:‘on‘")!‘‘ >
将parentid,catimage当做参数传递给exec(Map params)
<2>.exec方法中获取parentid参数(params.get("parentid");),即二级分类的分类id
<3>.List<Cat> cat_tree = goodsCatManager.listAllChildren(parentid);遍历所有当前二级分类的分类信息,赋值给变量名为"cat_tree"的list集合
<4>.若cat_tree不为空,则执行foreach语句将分类图标url依次set给cat对象"cat.setImage(imgPath);"
<5>.定义Map类型的data对象,放入showimage与cat_tree,函数返回data;
<6>.再次通过exec方法获取parentid参数,此时已获取顶层分类,故parentid不为0;
<7>.List<Cat> cat_tree = goodsCatManager.listAllChildren(parentid); 向方法中传入当前parentid,获取当前父分类的二级子分类;
<8>.调用foreach语句(for(Cat cat:cat_tree))将二级分类依次赋值给cat;
<9>.定义Map类型的data对象,将二级分类信息showimg与cat放入data对象,函数返回data
<10>.将返回的data,当做参数传递给BaseFreeMarkerTag类的exec(List jsonParam),将data对象转化为json格式对象
JSONObject jsonObject =JSONObject.fromObject(param);并返回一个object,HTML页面可用freemaker语法进行调用;
<*>.前台页面解析器FacadePageParser类,通过themeUriManager获得uri(themeUriManager.getPath(uri);),并解析得当前调用模板名为/index.html
if(tplFileName.equals("/")){
tplFileName="/index.html";
}
将uri return给前台模板处理器FacadePageParser中,返回"/"
即首页地址栏信息为"localhost:8080"
<11>.<#assign goodsCat = goodsCatTag("‘parentid‘:1,‘catimage‘:‘on‘")!‘‘ >
*前台index.html页面用freemaker语法将后台传入的map键值对取出,并将数据遍历定位在相应的页面表现位置;
<#list goodsCat.cat_tree as cat>
<#if cat_index<4>
<li class="<#if cat_index==0>tab_selected</#if>" rel="${cat.cat_id}">
<i class="<#if cat_index==0>arrow</#if>"></i>
<h3>${cat.name}</h3>
</li>
</#if>
</#list>
(2).商品列表部分
<1>.index.html页面中的<#assign goodsListTag = newTag("goodsListTag")>声明了一个goodsListTag标签,当标签被引用时,freemaker会将参数传递给后台,
即,<#assign goodsList=goodsListTag("‘tagid‘:‘1‘,‘goodsnum‘:‘6‘")>
将tagid,goodsnum当做参数传递给exec(Map params)
String catid =(String) params.get("catid"); -------------此参数为空
String tagid = (String)params.get("tagid");
String goodsnum = (String)params.get("goodsnum");
<2>.根据tagid,goodsnum参数,通过goodsManager的listGoods方法查询相应商品,并存入List对象goodsList;
<3>.将goodsList对象传递给freemarker标签基类BaseFreeMarkerTag,执行return this.exec(jsonObject);,将goodsList转换为json格式数据
3.静态资源加载
EopContextIniter 41行