如何快速学习freemarker以及使用经验

    freemarker

freemarker是静态模板,和html 、jsp类似,我第一次看见后缀是 .ftl文件,我嚓,这是什么鬼,原来是freemarker,使用它的时候你就可以理解前端页面和jsp什么没什么区别,怎样学习它,先分析代码,然后再去使用,不主张去看freemarker的书籍详细介绍,然后忘记了,浪费时间,当我们用到了不懂的在上网去学习,不废话了,先拿一片freemarker文件来分析
<#assign topnav="teacher">
<#assign title="${lesson.name}">
<#assign menu="none">
<#assign submenu="lesson">
<#include "/header.ftl">
<!-- CSS -->
<link href="/assets/sh/css/shCore.css" type="text/css" rel="stylesheet">
<link href="/assets/sh/css/shThemeDefault.css" type="text/css" rel="stylesheet"><div id="maincontainer"><section id="lesson"><div class="container"><div class="row"><div class="col-xs-8">			<section><h1 class="heading1"><img src="${course.coverUrl}" style="width:128px;height:72px;"><span style="font-weight: bold; color: #119717; vertical-align: bottom; margin-left: 10px; font-size: 20px;">${course.name}</span></h1><div class="lesson_bar"><span class="heading3" style="float: left; margin-top: 4px; margin-left: 10px;"><i class="fa fa-bars"></i> ${lesson.name}</span><span style="width:280px;float: right;">
<div class="bdsharebuttonbox"><a title="分享到QQ空间" href="#" class="bds_qzone" data-cmd="qzone"></a><a title="分享到新浪微博" href="#" class="bds_tsina" data-cmd="tsina"></a><a title="分享到腾讯微博" href="#" class="bds_tqq" data-cmd="tqq"></a><a title="分享到人人网" href="#" class="bds_renren" data-cmd="renren"></a><a title="分享到微信" href="#" class="bds_weixin" data-cmd="weixin"></a><a title="分享到豆瓣网" href="#" class="bds_douban" data-cmd="douban"></a><img src="/images/logo_shishuowang_88x23.png" class="retina" style="margin: 6px 6px 6px 0px; height: 23px;">
</div>
<script>window._bd_share_config = {"common" : {"bdSnsKey" : {},"bdText" : "${course.name} - ${lesson.name}","bdMini" : "2","bdMiniList" : false,"bdPic" : "","bdStyle" : "0","bdSize" : "24"},"share" : {}};with (document)0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+ ~(-new Date() / 36e5)];
</script>							</span></div><#if lesson.videoType == "shishuo"><div id="video_player"></div><script type="text/javascript">$(function(){jwplayer("video_player").setup({file: "${lesson.videoUrl}",width: '100%',aspectratio: '16:9',skin: "/assets/jwplayer/roundster.xml"});});</script><hr></#if><#if lesson.videoType == "youku"><div id="video_player"></div><script type="text/javascript">$(function(){playYouku('video_player','${lesson.videoPath}');});</script><hr></#if>					<div class=" js_init">${lesson.content}</div><div style="float:right;"><a class="btn btn-primary js_complete_lesson" href="javascript:void(0);"><i class="fa fa-undo"></i> 完成本节</a><#if lesson.nextLesson><#if teacherCourse.finish == "yes"><a class="btn btn-primary js_btn_review" href="javascript:void(0);"><i class="fa fa-undo"></i> 再重新学习一遍</a></#if>							<a class="btn btn-orange" href="/auth/course/${course.courseId}.htm?lessonId=${lesson.nextLesson.lessonId}"><i class="fa fa-fast-forward"></i> 下一节课:${lesson.nextLesson.name}</a><#else><a class="btn btn-primary js_btn_review" href="javascript:void(0);"><i class="fa fa-undo"></i> 再重新学习一遍</a><a class="btn btn-orange js_btn_finish" href="javascript:void(0);"><i class="fa fa-check"></i> 完成学习</a></#if></div></section>	</div><!-- Sidebar Start--><aside class="col-xs-4"><div class="sidewidt" id="lesson_right">					<ul class="nav nav-tabs" id="myTab"><li class="active"><a href="#list"><i class="fa fa-list-ol"></i> 目录</a></li><li class=""><a href="#description"><i class="fa fa-comment-o"></i> 介绍</a></li><li class=""><a href="#teacher"><i class="fa fa-user"></i> 老师</a></li><li class=""><a href="#comment"><i class="fa fa-comment"></i> 讨论</a></li></ul><div class="tab-content sideblog"><div class="tab-pane active" id="list"><ul class="nav nav-pills nav-stacked"><#list lessonList as lesn><li <#if lesn.lessonId==lesson.lessonId>class="active" </#if> id="lesson_${lesn.lessonId}"><a href="/auth/course/${course.courseId}.htm?lessonId=${lesn.lessonId}"><#if lesn.teacherLesson.finish == "doing"><i class="fa fa-adjust"></i> <!-- i class="fa fa-dot-circle-o"></i--><#elseif lesn.teacherLesson.finish == "no"><i class="fa fa-circle-o"></i><#else><i class="fa fa-circle"></i></#if>第${lesn_index+1}节:${lesn.name}</a></li></#list></ul>			              </div><div class="tab-pane" id="description">${course.summary}</div><div class="tab-pane" id="teacher"><div>			<img id="js_teacher_avatar" src="${teacher.avatarUrl}" alt="${teacher.name}"style="width: 80px; float: left;"><div style="margin-left:90px;"><h3 style="color: #353535;font-size: 22px;font-weight: bold;padding-top:6px;">${teacher.name}</h3><span>${teacher.headline}</span></div></div><div class="clearfix"></div>				              </div><div class="tab-pane" id="comment"></div></div></div>				</aside><!-- Sidebar End-->				</div></div></section>
</div>
<#list pageVo.list as teacher><li class="col-xs-3"> <div class="thumbnail"><span style="white-space:pre">	</span><a href="/auth/course/${teacher.course.courseId}.htm"><span style="white-space:pre">		</span><img alt="" style="width:240px;" src="${teacher.course.coverUrl}"><span style="white-space:pre">	</span></a><span style="white-space:pre">	</span><div class="name"><span style="white-space:pre">		</span><a href="/auth/course/${teacher.course.courseId}.htm" >${teacher.course.name}</a><span style="white-space:pre">	</span></div><span style="white-space:pre">	</span><div class="clearfix"></div><div class="teacher"><div> <a href="/teacher/${teacher.course.courseId}.htm;"><i class="fa fa-user"></i> ${teacher.course.teacher.name}</a></div></div></div></li></#list>
<script type="text/javascript">
$(function(){$('.js_btn_finish').click(function(){$.post("/auth/course/finish.json", { "courseId":${course.courseId},finish:"yes"},function(data){if(data.result){bootbox.alert("恭喜您,顺利完成了此课程。页面将跳到您的课程中心,继续选择课程学习。", function() {window.location.href = "/auth/course/learning.htm"});}}, "json");		});$('.js_btn_review').click(function(){$.post("/auth/course/finish.json", { "courseId":${course.courseId},finish:"no"},function(data){if(data.result){window.location.href = "/auth/course/${course.courseId}.htm"}}, "json");});$('.js_complete_lesson').click(function(){$.post("/auth/course/complete.json", { "courseId":${course.courseId},finish:"yes","lessonId":${lesson.lessonId}},function(data){if(data.result){window.location.href = "/auth/course/${course.courseId}.htm?lessonId=${lesson.nextLesson.lessonId}"}}, "json");});
})
</script>
<script type="text/javascript">
SyntaxHighlighter.all();
</script>
<#include "/footer.ftl">

从头分析啊,它并不是很神气的东西,
   <#assign topnav="teacher">  你看下assign这个东西 相当于保持变量 topnav里面就放入这个值,然后js就可以拿到这个值了,说到js,大家一定要把js文件放到末尾,不要放在开头的地方,因为放在开头,有些页面还没加载完,但是我调用了那个页面里面的Id或者class,那么就会报错,很头疼的,半天都不知道哪里出来错误,所以建议养成好的习惯,把js文件放在末尾,等页面加载完了,在调用js,题外话了,但是大家得了解
<pre name="code" class="html"><!-- CSS -->
<link href="/assets/sh/css/shCore.css" type="text/css" rel="stylesheet">
<link href="/assets/sh/css/shThemeDefault.css" type="text/css" rel="stylesheet">
看到了没有,可以放css文件,同样产生效果,
 
然后这里面没有什么<head></head>什么的  直接可以让<div></div>,在这里要看看怎么样的语法
<pre name="code" class="html"><div class=" js_init">${lesson.content}</div><div style="float:right;"><a class="btn btn-primary js_complete_lesson" href="javascript:void(0);"><i class="fa fa-undo"></i> 完成本节</a><#if lesson.nextLesson><#if teacherCourse.finish == "yes"><a class="btn btn-primary js_btn_review" href="javascript:void(0);"><i class="fa fa-undo"></i> 再重新学习一遍</a></#if>							<a class="btn btn-orange" href="/auth/course/${course.courseId}.htm?lessonId=${lesson.nextLesson.lessonId}"><i class="fa fa-fast-forward"></i> 下一节课:${lesson.nextLesson.name}</a><#else><a class="btn btn-primary js_btn_review" href="javascript:void(0);"><i class="fa fa-undo"></i> 再重新学习一遍</a><a class="btn btn-orange js_btn_finish" href="javascript:void(0);"><i class="fa fa-check"></i> 完成学习</a></#if>
这里有 ${lesson.content} 这个应该好理解吧,用strust的时候在jsp页面差不多意思,lesson是个对象,是在action层传过来的实体对象,然后content这个是lesson的属性,直接拿到这个值显示在这个地方。
 
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html"><#if teacherCourse.finish == "yes">和java里面的if(a=="")类似
<#else> 和else{}类似
</#if>这里是要用这个结束的,亲,别忘了,
 
 
<span style="font-family: Arial, Helvetica, sans-serif;">我们action层传过来的一般是集合,我们需要把这个集合循环遍历出来,这个时候我们分析下代码</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><#list pageVo.list as teacher><li class="col-xs-3"> <div class="thumbnail"><span style="white-space:pre">	</span><a href="/auth/course/${teacher.course.courseId}.htm"><span style="white-space:pre">		</span><img alt="" style="width:240px;" src="${teacher.course.coverUrl}"><span style="white-space:pre">	</span></a><span style="white-space:pre">	</span><div class="name"><span style="white-space:pre">		</span><a href="/auth/course/${teacher.course.courseId}.htm" >${teacher.course.name}</a><span style="white-space:pre">	</span></div><span style="white-space:pre">	</span><div class="clearfix"></div><div class="teacher"><div> <a href="/teacher/${teacher.course.courseId}.htm;"><i class="fa fa-user"></i> ${teacher.course.teacher.name}</a></div></div></div></li></#list>
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif;"><#list pageVo.list as teacher>这个pageVo.list是个集合  as 是语法  teacher代表是我们集合里面的每个数据是这个对象,</span><pre name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif;">${teacher.course.name}这个的话上面也讲了,teacher实体的属性的属性,就有值了,用完记得加上</#list> 结束</span>
<span style="font-family: Arial, Helvetica, sans-serif;">这个语法类似java里面</span>
<span style="font-family: Arial, Helvetica, sans-serif;">for(teacher a:list){System.out.println(a.name)}</span>
<span style="font-family: Arial, Helvetica, sans-serif;">对了 我们经常看到页面有公共部分,记得有<#include>这个标签哈,jsp里面也有类似的原理,安卓的界面里面也有,可以对比学习下。</span>
<span style="font-family: Arial, Helvetica, sans-serif;">这些是我常用的,如果有一些不熟悉的可以再去网上找,这样学比到网上从头看到尾效率更高。</span>
   
 

   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

还在纠结Dapper或者EF Core?不妨试试“混合ORM”--RepoDb

在.NET世界中&#xff0c;提到ORM&#xff0c;最常用的是下面2个&#xff1a;Dapper&#xff0c;通过提供IDbConnection的扩展方法来查询数据库。它的优点在于可以轻松地执行参数化查询&#xff0c;将结果转化为对象&#xff1b;非常高效&#xff0c;在速度方面拥有micro-ORM之…

android chart坐标轴互换,android - MPAndroidChart:在BarChart中将X轴的标签旋转90度 - SO中文参考 - www.soinside.com...

只需覆盖XAxisRenderer和renderAxisLabels(c: Canvas)方法。并将其设置为barChart itemView.barChart.setXAxisRenderer(CustomBarChartRenderer(itemView.barChart.viewPortHandler, itemView.barChart.xAxis, itemView.barChart.rendererXAxis.transformer))import android.g…

Rails IDE 有很多选择,但是具体到ubuntu 64bit 选择的余地就不多了,这里选择Aptana Studio 3 Beta...

1 下载 http://www.aptana.com/downloads/start 2 根据 要求安装sun JDK 1.6.* 安装步骤参考&#xff1a; 1. 编辑 /etc/apt/sources.list&#xff0c;去掉注释&#xff1a; ## Uncomment the following two lines to add software from Canonicals## partner repository.## Th…

使用 PHP 7 给 Web 应用加速

PHP 20周年了&#xff01;&#xff1f;&#xff1f; PHP 首发通告&#xff0c;1995年6月8日 发布于 COMP.INFOSYSTEMS.WWW.AUTHORING.CGI 主题&#xff1a;正式宣布&#xff1a;个人主页工具&#xff08;Personal Home Page Tools&#xff09;正式宣布个人主页工具&#xff08;…

mvc教程

第一章 mvc概述 入门 需要安装 Visual Studio 2008 或 Visual Web Developer 2008 Express 来构建 ASP.NET MVC 应用程序。还需要下载 ASP.NET MVC Framework。 如果没有 Visual Studio 2008&#xff0c;可以从下面的网址下载 90 天试用版&#xff1a; http://msdn.microsoft.c…

windows下面怎么github ssh 公钥,然后克隆项目

windos下面怎么github ssh 公钥,然后克隆项目 第一步、 1. 安装git,从程序目录打开 "Git Bash" 2. 键入命令:ssh-keygen -t rsa -C "email@email.com" 我的邮箱是chen_yu@kuyu.com , "email@email.com"是github账号 3. 提醒你输入key的…

连破四次吉尼斯世界纪录!厨师界再出神人,用一公斤拉面缔造了一代传奇,背后却是简单的原理……

全世界只有3.14 % 的人关注了爆炸吧知识超模君最喜欢的就是公司楼下海底捞火锅面。不仅是面确实好吃&#xff0c;更重要的是因为海底捞拉面小哥的技艺十分精湛&#xff01;提臀、收腹&#xff0c;只见拉面小哥化身蹦迪达人&#xff0c;在旋转跳跃中舞动拉面。一顿猛如虎的操作之…

微软推出 .NET 官方社区论坛

James 近日发布博客&#xff08;https://devblogs.microsoft.com/dotnet/introducing-the-net-tech-community-forums/&#xff09;&#xff0c;推出 .NET 官方社区论坛&#xff0c;为开发者提供一个官方的交流平台&#xff0c;小道消息&#xff0c;微软即将上线中文版的.NET网…

android sdk中添加自定义api,android SDK中添加自定义api【转】

本文的思路&#xff1a;android APP调用自定义java API,自定义java API调用自定义jni接口1&#xff1a;在android源码目录framework/base下面创建add目录add目录里面的结构如下&#xff1a;里面的Nadd.java android_jnitest_Nadd.cpp 和Android.mk内容如下&#xff1a;Nadd.jav…

HtmlGenericControl

HtmlGenericControl 构造函数 (String)使用指定的标记初始化 HtmlGenericControl 类的新实例。命名空间&#xff1a; System.Web.UI.HtmlControls 程序集&#xff1a; System.Web&#xff08;在 System.Web.dll 中&#xff09; 语法Public Sub New ( _tag As String _ )public …

远程控制利器TeamViewer使用教程(图)

TeamViewer是什么&#xff1f; 他是一款免费的可以穿透内网的远程控制软件&#xff0c;可以实现桌面共享&#xff0c;文件传送等功能&#xff0c;简单一点说就是和QQ远程协助一样&#xff0c;但是比QQ的远程协助功能更为强大。 TeamViewer与木马有什么区别&#xff1f; 说到远程…

POJ-3635 Full Tank? 变形最短路

题目链接&#xff1a;http://poj.org/problem?id3635 容易想到用二维数组记录状态求最短路&#xff0c;然后用优先队列优化&#xff0c;类似于Dijkstra和BFS。我开始设计的过程是直接直接从当前点向相邻点转移并找出所有可能状态&#xff0c;结果TLE。貌似是无关状态太多了&am…

Android之Bitmap学习总结

BitMap类&#xff1a; public void recycle()——回收位图占用的内存空间&#xff0c;把位图标记为Dead public final boolean isRecycled() ——判断位图内存是否已释放 public final int getWidth()——获取位图的宽度 public final int getHeight()——获取位图的高度 pub…

千万别让男朋友穿你的短裙......

1 工作太辛苦&#xff0c;我要走了...▼2 应该很有效&#xff1f;▼3 疑车有据&#xff01;&#xff01;▼4 这是一部色魔功法...▼5 穿上女友的衣服居然毫无违和感▼视频来源见水印&#xff0c;侵删6 整挺好&#xff01;▼7 这只有熊猫可以驾驭得了......▼你点的每个赞&…

迎接.NET 6,《dotnet+Linux中文手册》完整PDF开放下载!

昨晚已经正式发布了.NET6,具体参见&#xff1a;https://devblogs.microsoft.com/dotnet/announcing-net-6/。这是.NET团队和社区努力一年的成果&#xff0c;C# 10 和 F# 6 有很大的语言改进&#xff0c;使代码更简单、更好。性能有了巨大的提升&#xff0c;我们看到微软的云服务…

excel函数中if android,在Android中阅读Excel

目前我正在开发android开发.根据要求,应用程序应该能够读取Excel文件以进行数据输入.正如其他人从这个主题开始,我已经完成了Java Excel Api和Apache POI,但两者都需要进行一些修改以满足我的要求&#xff1a;JExcel API&#xff1a;– 不能支持XLSXApache POI&#xff1a;– 支…

javaIo流实际应用

/*查看目录下所有的文件*/ package cn.file; import java.io.File;public class Text2 {public static void main(String[] args) {File anew File("F:\\图片");File a1new File("F:\\你的");chek(a1);}public static void chek(File f3) {//查看目录…

Android之网络编程之网络通信几种方式实例分享

这篇文章主要介绍了android 网络编程之网络通信几种方式&#xff0c;有需要的朋友可以参考一下 现在总结了六种方式&#xff1a; &#xff08;1&#xff09;针对TCP/IP的Socket、ServerSocket &#xff08;2&#xff09;针对UDP的DatagramSocket、DatagramPackage。这里需要注意…

常用MIME类型(Flv,Mp4的mime类型设置)

也许你会在纳闷&#xff0c;为什么我上传了flv或MP4文件到服务器&#xff0c;可输入正确地址通过http协议来访问总是出现“无法找到该页”的404错误呢&#xff1f;这就表明mp4格式文件是服务器无法识别的&#xff0c;其实&#xff0c;这是没有在iis中将相应的MIME类型进行设置的…

史上四大“杀人”建筑,烧掉几百亿,却犯低级错误,网友:有钱人的智商,我不懂

全世界只有3.14 % 的人关注了爆炸吧知识本文转自普象工业设计小站这个世界上有多少荒谬的建筑&#xff1f;国内土味审美的大楼只是冰山一角在更多的国家里耗费巨资&#xff0c;却无比失败的工程比土味大楼更多更荒唐你也许听说过美国这座会跳舞的大桥耗资千万&#xff0c;由优秀…