Jeecms6中后台控制层Action如何将值传入前台视图层模板中的?
Jeecms后台控制层如何传值到前台freemarker的???
最近在研究Jeecms6的时候,发现一个令人费解的问题??举个例子,
点击“内容“选项后,出现上图下面的内容,那么,lz就来分析这个过程的后台处理流程
为了突出问题所在,lz就略去了前面浏览器发送请求到控制层的过程,直接来看控制层。。。。
处理该部分业务逻辑的代买如下:
@RequiresPermissions("content:v_list")
@RequestMapping("/content/v_list.do")
public String list(String queryStatus, Integer queryTypeId,
Boolean queryTopLevel, Boolean queryRecommend,
Integer queryOrderBy, Integer cid, Integer pageNo,
HttpServletRequest request, ModelMap model) {
long time = System.currentTimeMillis();
String queryTitle = RequestUtils.getQueryParam(request, "queryTitle");
queryTitle = StringUtils.trim(queryTitle);
String queryInputUsername = RequestUtils.getQueryParam(request,
"queryInputUsername");
queryInputUsername = StringUtils.trim(queryInputUsername);
if (queryTopLevel == null) {
queryTopLevel = false;
}
if (queryRecommend == null) {
queryRecommend = false;
}
if (queryOrderBy == null) {
queryOrderBy = 4;
}
ContentStatus status;
if (!StringUtils.isBlank(queryStatus)) {
status = ContentStatus.valueOf(queryStatus);
} else {
status = ContentStatus.all;
}
Integer queryInputUserId = null;
if (!StringUtils.isBlank(queryInputUsername)) {
CmsUser u = cmsUserMng.findByUsername(queryInputUsername);
if (u != null) {
queryInputUserId = u.getId();
} else {
// 用户名不存在,清空。
queryInputUsername = null;
}
}
CmsSite site = CmsUtils.getSite(request);
Integer siteId = site.getId();
CmsUser user = CmsUtils.getUser(request);
Integer userId = user.getId();
byte currStep = user.getCheckStep(siteId);
Pagination p = manager.getPageByRight(queryTitle, queryTypeId,user.getId(),
queryInputUserId, queryTopLevel, queryRecommend, status, user
.getCheckStep(siteId), siteId, cid, userId,
queryOrderBy, cpn(pageNo), CookieUtils.getPageSize(request));
List<ContentType> typeList = contentTypeMng.getList(true);
List<CmsModel> models=cmsModelMng.getList(false, true);
if(cid!=null){
Channel c=channelMng.findById(cid);
models=c.getModels(models);
}
model.addAttribute("pagination", p);
model.addAttribute("cid", cid);
model.addAttribute("typeList", typeList);
model.addAttribute("currStep", currStep);
model.addAttribute("site", site);
model.addAttribute("models", models);
addAttibuteForQuery(model, queryTitle, queryInputUsername, queryStatus,
queryTypeId, queryTopLevel, queryRecommend, queryOrderBy,
pageNo);
time = System.currentTimeMillis() - time;
return "content/list";
}
该段代码最后返回是一个字符串,框架会根据配置文件内容转入content目录下list.html(lz不知道这里为什么要使用html而不是ftl),
前台页面上是如何显示的呢?传入部分代码:
......
<@p.table value=pagination;content,i,has_next><#rt/>
<@p.column title="<input type='checkbox' οnclick='Pn.checkbox(\"ids\",this.checked)'/>" width="25" align="center">
<input type='checkbox' name='ids' value='${content.id}' οnclick="Pn.selectCheckBox('${content.id}',this.checked)"/><#t/>
</@p.column><#t/>
<@p.column title="ID" align="center">${content.id}</@p.column><#t/>
<@p.column code="content.title">
......
可以看到这里是通过$(content.*)来取得要显示的值的,那么问题就来了
lz遍寻后台Action文件都找不到该content是在何处声明的,又是在何处赋予查询结果值?????
苦思不得琪姐。。。。。。。。
既然这个系统时能够正常使用的,也就是说,代码是肯定没有问题的,那么肯定就是没有找到content是如何实现的?
经过不懈的努力发现,在list.html中有这么一句话,如下图在326行
在这一行,使用jeecms开发人员定义的<@p.table>标签,那么它如何定义的呢?碾转反侧(查找标签ftl过程略),找到table.ftl标签文件,如下:
我们可以看到前面4行,后面不重要,不理解也没关系,第一个值value就指的是用于显示列表数据,
OK,哈哈哈,那么我们就可以理解
<@p.table value=pagination;content,i,has_next><#rt/>
这句话的意思
听我细细解释:首先后台pagination是后台Action定义,有疑问的同学可以去jeecms6后台代码查看,在这里将pagination赋值给table的value,table就是一个集合对象
需要在前台展示集合对象的数据,就使用循环来展示,这里在<@p.table>标签文件table.ftl中自定义了循环格式(有兴趣的同学可以去研究一下该标签文件),如果硬要把
分号后面的内容”content,i,has_next“的做个java翻译的话,我像应该是这样:
List list=pagination;
ListIterator iterator=list.listIterator();
while(iterator.hasnext()){
Content content=list.get(i);
i++;
iterator.next();
}
这样理解是不是就容易多了。。。。。。
那么i就是指的这个集合遍历的过程,从集合开始到最后,
content是集合每一轮遍历后得到的Content对象
has_next查看是否遍历都集合末尾
那么经过这样的遍历,前台模板文件中使用诸如content.*形式的值也不难理解了
本次通过这么一个小小例子来解读了Jeecms6后台向前台传值的过程,希望对有需要的同学帮助理解
Jeecms6中后台控制层Action如何将值传入前台视图层模板中的?的更多相关文章
- ASP.Net中后台控制页面提示信息的显示方式
ASP.Net中后台控制页面提示信息的显示方式 用于删除或修改成功后的显示:(背景No空白) ScriptManager.RegisterStartupScript(this, typeof(Pa ...
- java web项目中后台控制层对参数进行自定义验证 类 Pattern
Pattern pattern = Pattern.compile("/^([1-9]\d+元*|[0]{0,1})$/");//将给定的正则表达式编译到模式中 if(!" ...
- Django-1版本的路由层、Django的视图层和模板层
一.Django-1版本的路由层(URLconf) URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:我们就是以这种方式告诉Dja ...
- Django系列(二):Django的路由层,视图层和模板层
1.Django的路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:我们就是以这种方式告诉Django,对于客户端发来的某 ...
- 【Django】 视图层说明
[Django视图层] 视图层的主要工作是衔接HTTP请求,Python程序和HTML模板,使他们能够有机互相合作从模型层lou到数据并且反馈.说到视图层的工作就有以下几个方面要说 ■ URL映射 对 ...
- 微信小程序开发教程(八)视图层——.wxml详解
框架的视图层由WXMKL(WeiXin Markup language)与WXSS(WeiXin Style Sheet)编写,由组件进行展示. 对于微信小程序而言,视图层就是所有.wxml文件与.w ...
- 测试开发之Django——No6.Django模板中的标签语言
模板中的标签语言 1.if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即:变量存在,非空,不是布尔值假),系统会显示在{% if %} 和 {% endi ...
- 如何在smarty模板中执行php代码
Smarty模板主要的目的是分离逻辑层和表现层,所以在模板中不应该包含逻辑部分,逻辑层也不应该含有HTML.要在模板中插入逻辑程序的这种做法"非常"不被推荐,在你的case中. 如 ...
- thinkPHP 模板中的语法知识 详细介绍(十二)
原文:thinkPHP 模板中的语法知识 详细介绍(十二) 本章节:介绍模板中的语法,详细的语法介绍 一.导入CSS和JS文件 ==>记住常量的是大写 1.css link .js sc ...
随机推荐
- 单层感知机_线性神经网络_BP神经网络
单层感知机 单层感知机基础总结很详细的博客 关于单层感知机的视频 最终y=t,说明经过训练预测值和真实值一致.下面图是sign函数 根据感知机规则实现的上述题目的代码 import numpy as ...
- Hadoop yarn任务调度策略介绍
二.Capacity Scheduler(容器调度器)的配置 2.1 容器调度介绍 Capacity 调度器允许多个组织共享整个集群,每个组织可以获得集群的一部分计算能力.通过为每个组织分配专门的队列 ...
- 一次完整的HTTP请求与响应涉及哪些知识?
Java技术栈 www.javastack.cn 优秀的Java技术公众号 作者:Ruheng 地址:http://www.jianshu.com/p/c1d6a294d3c0 本文以HTTP请求和响 ...
- 第五周课堂笔记1th
可迭代对象 Isinstance 判断一个对象是否属于某种类型 接受两个参数 迭代器 以下数据类型都没迭代器: 把没有迭代器的类型更改为有迭代器类型 用迭代器进行取值: 判断迭代器的方法: 3. ...
- C#真他妈神奇,一个函数都不用写就能实现一个简单的邮件发送工具
MailMessage EmaillMessage = new MailMessage( //创建一个对象 new MailAddress(loning.Te ...
- 注解@Qualifier@Primary
在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢 根据注入资源的注解不同实现的方式有一点小小的区别 在Controller中使用 @Auto ...
- 设置编辑工具UltraEdit的背景色为护眼颜色
1.视图--->主题--->管理主题---> 2.--->编辑器--->纯文本--->第二个框(背景色) 3.--->规定自定义颜色--->建议(色调: ...
- order方法属于模型的连贯操作方法之一
order方法属于模型的连贯操作方法之一,用于对操作的结果排序. 用法如下: $Model->where('status=1')->order('id desc')->limit(5 ...
- HDU - 6128
题意略: 题解:二次剩余板子题 //#pragma GCC optimize(2) //#pragma GCC optimize(3) //#pragma GCC optimize(4) //#pra ...
- 2-sat——poj3678经典建图
比较经典的建图,详见进阶指南 2-sat一般要用到tarjan来求强连通分量 /*2-sat要加的是具有强制关系的边*/ #include<iostream> #include<cs ...