以修改download中的模板channel_level2.html为例,介绍下模板在后台的加载过程。
1. 首先找到对应的struts-core-admin.xml.
<!--模板管理-->
<package name="core.template" namespace="/admin/core/template" extends="core-default">
<action name="Com_*" method="{1}" class="core.templateAct">
<result name="list">/WEB-INF/core_sys/template/list.html</result>
<result name="add">/WEB-INF/core_sys/template/add.html</result>
<result name="edit">/WEB-INF/core_sys/template/edit.html</result>
<result name="left">/WEB-INF/core_sys/template/left.html</result>
<result name="right">/WEB-INF/core_sys/template/right.html</result>
<result name="main">/WEB-INF/core_sys/template/main.html</result>
<result name="solution">/WEB-INF/core_sys/template/solution.html</result>
<result name="exportTpl">/WEB-INF/core_sys/template/export_tpl.html</result>
<result name="importTpl">/WEB-INF/core_sys/template/import_tpl.html</result>
</action>
</package>
2. 对应的edit.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>edit</title>
<#include "/WEB-INF/core_sys/head.ftl"/>
<script type="text/javascript">
function ajaxSubmit() {
$.postJson('${base}/admin/core/template/ajax/update.do', {
'tplName' : $('#tplName').val(),
<#if tplName?starts_with("tag_")>
'tplContent' : $('#tplContent').val(),
<#else>
'tplContent' : FCKeditorAPI.GetInstance('FCKeditor1').GetHTML(true),
</#if>
'relPath' : $('#relPath').val(),
'uploadRuleId': ${uploadRuleId}
}, function(data) {
if (data.success) {
alert(data.msg);
} else {
alert(data.msg);
}
});
}
</script>
</head>
<body>
<div class="body-box">
<div class="rhead">
<div class="rpos">当前位置: 模板管理 - 修改</div>
<form class="ropt" method="post">
<input type="submit" value="返回列表" onclick="this.form.action='Com_list.do?relPath=${parentPath?j_string}';"/>
</form>
<div class="clear"></div>
</div>
<@p.form labelWidth="15" onsubmit="ajaxSubmit();return false;">
<@p.td label="模板文件名">${tplName}<@p.hidden id="tplName" name="tplName"/></@p.td><@p.tr/>
<@p.td>
<#if tplName?starts_with("tag_")>
<div>按ctrl+s可以直接保存</div>
<@p.textarea id="tplContent" name="tplContent" style="width:100%;" cols="70" rows="20" onkeydown="if((event.keyCode==115||event.keyCode==83)&&event.ctrlKey){ajaxSubmit();return false;}"/>
<#else>
<script type="text/javascript">
var oFCKeditor = new FCKeditor('FCKeditor1');
oFCKeditor.BasePath='${base}/fckeditor/';
oFCKeditor.Config["CustomConfigurationsPath"]="${base}/fckeditor/myconfig.js?"+(new Date()*1);
//oFCKeditor.Config["CustomConfigurationsPath"]="${base}/fckeditor/myconfig.js";
oFCKeditor.ToolbarSet='template';
oFCKeditor.Config["TabSpaces"]=2;
oFCKeditor.Config["LinkUpload"] = false;
oFCKeditor.Config["ImageUpload"] = false;
oFCKeditor.Config["FlashUpload"] = false;
<#if uploadRuleId??>
oFCKeditor.Config["uploadRuleId"]=${uploadRuleId};
</#if>
<#if !parentPath?contains("include") && !tplName?starts_with("inc_")>
oFCKeditor.Config["FullPage"]=true;
</#if>
oFCKeditor.Config["EnterMode"]='p';
oFCKeditor.Config["FormatOutput"]=true;
oFCKeditor.Config["FillEmptyBlocks"]=false;
oFCKeditor.Config["FromSrc"]="\\$\\{root\\},\\$\\{sysResRoot\\},\\$\\{base\\}";
oFCKeditor.Config["ToView"]="${web.userResUrl},${web.sysResUrl},${web.webUrl}";
oFCKeditor.Config["FromView"]="${web.userResUrl},${web.sysResUrl},${web.webUrl}";
oFCKeditor.Config["ToSrc"] ="${r'${root}'},${r'${sysResRoot}'},${r'${base}'}";
oFCKeditor.Height=350;
oFCKeditor.Value="${tplContent?js_string}";
oFCKeditor.Create();
</script>
</#if>
</@p.td><@p.tr/>
<#--
<@p.td><@p.editor id="tplContent" name="tplContent" height="400" fullPage="true"/></@p.td><@p.tr/>
-->
<@p.td>
<input type="hidden" name="uploadRuleId" value="${uploadRuleId}"/>
<@p.hidden id="relPath" name="relPath" />
<@p.submit value="保存"/> <@p.reset value="重置"/>
</@p.td>
</@p.form>
</div>
</body>
</html>
3. 找到submit出发的action标签 p,在freemarker.properties中
auto_import="/WEB-INF/ftl_lib/ponyjava.com/index.ftl" as p, "/WEB-INF/ftl_lib/jeecms/index.ftl" as cms
4.找到P标签定义的ftl,button.ftl
<#--
<input type="submit"/>
-->
<#macro submit
value="提交"
id="" name="" class="" style="" size="" title="" disabled="" tabindex="" accesskey=""
onclick="" ondblclick="" onmousedown="" onmouseup="" onmouseover="" onmousemove="" onmouseout="" onfocus="" onblur="" onkeypress="" onkeydown="" onkeyup="" onselect="" onchange=""
>
<input type="submit"<#rt/>
value="${value}"<#rt/>
<#if id!=""> id="${id}"</#if><#rt/>
<#include "common-attributes.ftl"/><#rt/>
<#include "scripting-events.ftl"/><#rt/>
/><#rt/>
</#macro>
4. 继续研究后台是怎么更新的。。。
相关推荐
Freemarker与Jeecms模板开发实战学习手册
Freemarker 是一款基于 Java 的模板引擎,专为实现动态数据与静态页面的高效融合而设计。它通过模板文件(.ftl)将业务逻辑与表现层分离,广泛应用于 Web 开发,特别是在内容管理系统(如 Jeecms)中发挥着核心作用。其核心机制是:通过数据模型(Model)与模板(View)的结合,在运行时生成最终的 HTML 页面。这种机制不仅提升了开发效率,也增强了系统的可维护性与可扩展性。在 Jeecms 中,Freemarker 被用于构建网站前台页面,实现内容的动态渲染和模板复用。
jeecms使用总结
系统->模型管理开启后从栏目或者内容页面选择对应的模型,此时可配置对应模型改变对应模板渲染的字段属性,原始属性参考文档对应说明,自定义属性arr对象中对应的字段,同时使用文档对应的attrValue等属性获取对应值等。
JeeCMS模板
非常超值的JEECMS模板,非常漂亮美观!简洁设计!纯手工打造!
Struts2中checkboxlist标签——应用、实现换行
最近刚刚进入公司、就应用到了没学习多久的Struts2框架!Struts1跟XW在学校的时候也没有接触过!刚刚做项目的时候、有点乱、不知道什么时候该做什么、该怎么做!现在基本上熟悉了Struts2的简单应用!看来、学习编程、做项目才是王道啊! 欢迎技术交流。 QQ:138986722 先来看看checkboxlist标签、都有些什么属性: name-定
JeeCMS前台模板
非常漂亮的一套模板,持续更新当中,每天更新一点点!现在的还不是最终完美版哦,不过接近完美版了!
ArcGIS:根据DEM数据提取区域水系
利用DEM数据提取区域水系是常见的水文分析应用,为了获取区域的矢量水系数据,我们可以通过ArcGIS对高程DEM数据进行水文分析,为地表水流建立模型,进而获取到该地的水系数据,DEM数据精度越高,获取到的水系数据精度也就越高。以下介绍如何用ArcGIS提供的工具提取水系。
jeecms之入口解决和模板复制
今天将jeecms跑起来并结合文档进行了一点学习.(jeecmsv6. springMVC+spring+hibernate) 一. 模板目录的创建 根据jeecms提供的二次开发文档, 找到了站点模板目录, 然后尝试复制了default下的所有目录到自己新建的myTpl目录下, 并将模板路径设置为myTpl(进入后台即可设置), 运行后可以找到页面, 但是样式乱了, 利用审查元
为什么需要知识图谱?什么是知识图谱?——KG的前世今生
我的知乎专栏,对知识图谱感兴趣的朋友可以关注。标题的命名顺序可能让有的读者不太习惯。通常在介绍一个陌生事物的应用前,我们先给出其定义。之所以换个顺序,是为了不让读者一开始就接触比较冰冷生硬的概念刻板描述(后面我尽量用更具体、准确的例子来表达),另一方面也是为了通过现实生活中的例子自然的引入知识图谱的概念。希望通过这种方式加深读者的印象和理解。为了减轻读者理解的负担,我尽可能地避免引入过多的概念和技术
jeecms首页模板自定义
我们在点击【查看首页】时,发现出现的并不是我们自定义的首页模板,而是jeecms系统自带的首页。 通过下面的步骤,我们可以解决这个问题!!Step1:点击左菜单栏【站点设置】,在【首页模板】中选择【默认】,保存。 Step2:进入本地tomcat的文件路径下:tomcat/webapps/ROOT/WEB-INF/t/cms/www 【default】文件夹是系统自带的存放模板的文件夹
脑机接口(BCI)从原理到开发实战 07|运动想象BCI实战:基于BCI Competition IV 2a数据集
本文基于BCI Competition IV 2a数据集,详细介绍运动想象脑机接口系统的全流程实现。首先概述了该数据集的实验范式、参数特点和优势,然后指导环境准备与数据下载。通过代码示例展示了数据加载、事件标记提取和信号可视化方法。重点构建了完整的预处理流水线,包括通道选择、重参考、带通滤波(8-30Hz)和ICA去伪迹等关键步骤。文章旨在帮助读者将零散的BCI知识整合为完整的实战项目,掌握从原始脑电数据到运动意图解码的核心技术。
数学建模常用模型10 :数据包络(DEA)分析法(投入产出法)
数据包络分析是评价多输入指标和多输出指标的较为有效的方法,将投入与产出进行比较。它的结果包含的意思有: ①θ=1,DEA有效,表示投入与产出比达到最优 ②θ<1,非DEA有效,表示投入与产出比没有达到最优,一般来说,θ越大说明效果越好。 数据包络分析是通过对投入的指标和产出的指标做了一个线性规划,并且进行变换后,然后根据其线性规划的对偶问题(线性规划对偶问题具有经济学意义),求解这个对...
jeecms模板制作
1.最新图文: [@cms_content_list count='4' titLen='10' typeId='2' channelOption='1'] ul class="list right_pic"> [#list tag_list as d] li>a href="${d.url}" target="_blank"> img src="${d.typeImg!site.d
深度揭秘!用 DeepSeek 打造超智能电商客服系统全流程
摘要:本文围绕使用 DeepSeek 开发电商智能客服展开详细教程。先介绍前期准备,包括了解 DeepSeek、获取 API 权限与搭建开发环境。接着阐述数据收集预处理,结合电商业务逻辑实现商品与订单信息查询。还提及优化性能的方法,如模型微调、多轮对话管理和错误处理。然后说明了基于 Web 和云平台的部署方案。最后强调持续监控和改进的重要性,通过设置监控指标、收集分析用户反馈来优化系统,助力开发者打造高效电商智能客服。
java cms模板_jeecms java cms 网站内容管理系统具有许多基于模板的优秀设计 - 下载 - 搜珍网...
jeecms/404.htmljeecms/index.jhtmljeecms/install/config/web.xmljeecms/install/db/jeecms-db-2012-sp1.sqljeecms/install/db/jeecms-init-2012-sp1.sqljeecms/install/img/azlogo.gifjeecms/install/img/bg1.gifj...
Python 爬虫实战:科研数据库学术论文数据抓取
在科研工作中,学术论文是获取前沿知识和研究方法的重要资源。然而,手动从科研数据库中查找和整理论文信息往往耗时费力。幸运的是,Python 爬虫技术可以自动化这一过程,帮助我们高效地抓取和管理学术论文数据。本文将详细介绍如何使用 Python 爬虫技术抓取科研数据库中的学术论文数据,并进行全字段提取和文献管理,助力科研工作。
影像技术实战02:FFmpeg 镜头切分误检、漏检问题排查与基于场景变化的稳定分镜方案
本文介绍了基于FFmpeg的镜头切分技术在实际应用中的常见问题及解决方案。文章首先指出单纯使用select='gt(scene,0.4)'命令进行镜头检测存在误检、漏检等问题,包括黑场、字幕变化被误判为镜头切换,以及相似场景切换被漏检等情况。随后提出了一套四层架构的稳定解决方案:1)用FFmpeg提取候选镜头变化点;2)解析变化点时间和分数;3)通过后处理过滤异常点;4)按时间点切割视频片段并生成报告。文中详细展示了Python实现代码,包括场景点检测、时间间隔过滤等功能模块,为视频剪辑、影视解说等场景提供
JEECMS模板
1.列表当前栏目ID: channelId=channel.id 2.列出栏目 [@cms_channel_list][#listtag_listasc]<ahref="${c.url}">${c.name}</a><br/>[/#list][/@cms_channel_list] 只是我却一直没理解,为何ta...
【txt文本加密】使用 cryptography 库实现加密和解密
cryptography 库是一个强大的 Python 库,用于实现加密和解密功能。它提供了各种加密算法,包括对称加密、非对称加密、哈希函数等。
jeecms模板标签说明
目 录 第 1 章 Include标签 第1.1节 功能简介 第1.2节 标记说明 第 2 章 ArtiList标签 第2.1节 功能简介 第2.2节 标记说明 第 3 章 Position标签 第3.1节 功能简介 第3.2节 ...
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
JEECMS站群管理系统-- 标签使用和模板的制作
1模板规划 1.1资源文件 资源文件就是网页中用到的图片、CSS、JS等元素,在CMS系统中所有的资源文件在网站的根目录中的 /res_base/所属网站定义资源目录/TEMPLEATE/WEB /res_base/所属网站定义资源目录/TEMPLEATE/WAP 解释:网站定义资源 在CMS系统中可以同时管理多个网站,也就是多个网站可以同时使用一套CMS系统,但是每一个网...
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
JEECMS相关语法最近更新
Freemarker与jeecms的关系主要体现在技术架构和页面展示方面。 首先,jeecms是一个著名的开源内容管理系统(CMS),它采用了一系列先进的技术和组件来构建其强大的功能和灵活的架构。在这些技术中,Freemarker被用作一个重要的组成部分。 具体来说,Freemarker是一个模板引擎,一个基于模板生成文本输出的通用工具。在jeecms中,Freemarker主要负责页面的展示和渲染。通过使用Freemarker,jeecms能够将动态数据与静态模板相结合,生成最终的HTML页面,从而为
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
html调用如何使用jeecms库,JEECMS标签使用实例教程-序
JEECMS自2008年10月20日发布以来,已经历了三次版本升级,目前最新的版本为JEECMS v2.1 beta版。在这个过程中,JEECMS经受了很多考验。作为国内首个一开始就宣布开源的JEE项目,其受到各界的质疑和压力可想而知。不过我们坚信,只要不断努力,加上网友们的关注和支持,JEECMS一定能够迅速走向成熟,为国内开源添砖加瓦。随着版本的不断升级,JEECMS也经历了几次大的改进。然而...
jeecms中的一些总结
本次做公司网站,基本熟悉了jeecms的使用,在使用jeecms的if语句时,有以下几个小: 1.当给模型新增一个字段时,在使用标签拿该字段,必须给标签中加attr这个属性。如下例子: ${tag_bean.attr.email} email是jeecms的模板中没有的字段,所以通过tab_bean标签获取的时候需要加attr属性 2.在jeecms的标签中,if标签的使用 if
1111



被折叠的 条评论
为什么被折叠?



