- tt白
-
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!<c:forEach var="each" items="${typeProList}" begin="0" end="0">
<c:forEach var="product" items="${each.proList}" begin="0" end="1">
<div class="bot_right_pro_1">
<div class="pro_1_1"><a href="${pageContext.request.contextPath }/s/product.shtml?method=productinfo&proid=${product.id }"><img src="${pageContext.request.contextPath }<%=SConstants.CEM_UPLOAD_PRODUCT_PATH %>${product.picurl }" title="${product.name }" width="90" height="90"/></div>
<div class="pro_title"><a href="${pageContext.request.contextPath }/s/product.shtml?method=productinfo&proid=${product.id }" title="${product.name}"><strong><shopping:TagUtil type="string" begin="0" end="5" target="${product.name}"/></strong></a></div>
<div class="pro_title"><img src="${pageContext.request.contextPath}/images/huigou/icon_2.jpg" /><strong><span class="red">${product.hmprice }元</span></strong></div>
</div>
</c:forEach>
</c:forEach>
这是我根据以上写的ftl(freemarker 标签写的)
<#if typeProList?exists>
<#list typeProList[0..0] as each>
<#list each.proList[0..1] www.h****.com as product>
<div class="bot_right_pro_1">
<div class="pro_1_1"><a href="/huigou/s/product.shtml?method=productinfo&proid=${product.id }"><img src="/huigou<%=SConstants.CEM_UPLOAD_PRODUCT_PATH %>${product.picurl }" title="${product.name }" width="90" height="90"/></div>
<div class="pro_title"><a href="/huigou/s/product.shtml?method=productinfo&proid=${product.id }" title="${product.name}"><strong><shopping:TagUtil type="string" begin="0" end="5" target="${product.name}"/></strong></a></div>
<div class="pro_title"><img src="/huigou/images/huigou/icon_2.jpg" /><strong><span class="red">${product.hmprice }元</span></strong></div>
</div>
</#list>
</#list>
</#if>
“freemarker” 是什么意思?
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。在所有采用网页静态化手段的网站中,FreeMarker使用的比例大大的超过了其他的一些技术。HTML静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以使用FreeMarker将HTML静态化。比如一些网站的公用设置信息,这些信息基本都是可以通过后台来管理并存储在数据库中,这些信息其实会大量的被前台程序调用,每一次调用都会去查询一次数据库,但是这些信息的更新频率又会很小,因此也可以考虑将这部分内容进行后台更新的时候进行静态化,这样就避免了大量的数据库访问请求,从而也就提高了网站的性能。与JSP相比,FreeMarker的一个优点在于不能轻易突破模板语言开始编写Java代码,因此降低了领域逻辑漏进视图层的危险几率。但缺点是需要一点附加配置来将其平稳地集成到应用程序中,一些IDE(集成开发环境)可能并不完全支持它,当然还有开发者或设计者也许需要学习一门陌生的模板语言。相关的JAR文件将要添加到WEB-INF/lib(在需要的时候,它们包含在Spring中)。2023-08-07 17:06:031
什么是FreeMarker?
它是一个Java package,面向Java程序员的class library。它本身并不是针对最终用户的应用,而是允许程序员将其嵌入到他们的产品中。 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC(Model View Controller)模式的应用程序。使用 MVC 模式作为动态的WEB页面的想法,是为了分隔页面设计者 (HTML 设计者) 和程序员。.每个人做自己擅长的那一部分。设计者可以不通过程序员的改变或修改代码来改变网页的样子,因为应用逻辑(Java程序)和页面设计(FreeMarker 模版)是分开的。模板不会被复杂繁琐的程序框架所 破坏。即使当一个项目的程序员和 HIMTL页面的制作者是同一个人时,这种分隔也是很有用,因为这样有助于保持应用的清晰并易于维护。 尽管FreeMarker有一些编程的能力,但它并不是一个象PHP那样的成熟的编程语言。与Java不同的是,Java程序准备用来显示的数据(如 SQL queries) ,而Freemarker仅是生成文本页,这个文本页显示用于模板的预备数据。 FreeMarker不是一个Web应用框架,而更适合充当Web应用框架里的一个组件的角色,但FreeMarker引擎本身对HTTP或servlets并不关心,它仅仅是生成文本。在非Web应用环境中它同样能够展示完美的用途。然而值得注意的是:我们为使用FreeMarker提供了方便的解决方案,作为Model2框架(如Struts)的视图组件,你也可以在模版中使用JSP标签。 FreeMarker是免费的,有 BSD-style license Servlet运行于Java-enabled Web Server中。 Java Servlet 可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务。 最早支持Servlet技术的是JavaSoft的Java Web Server 。此后,一些其它的基于Java的Web Server开始支持标准的2023-08-07 17:06:111
freemarker的特性有哪些
1、FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写2、FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序3、FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据4、FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件5、FreeMarker与容器无关,因为并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境6、FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库7、FreeMarker是免费的2023-08-07 17:06:201
freemarker生成go语言
主要通过以下几个过程生成:(一)编写模板文件(二)配置FreeMarker(三)统一文件生成工具(四)数据库操作(五)封装填充数据FreeMarker是一款模板引擎:即一种基于模板和动态数据,用于输出文本的通用工具。FreeMarker模板使用FreeMarker Template Language(FTL)编写,它是一种简单的、专用的语言。代码生成器的实现原理十分简单,就是根据数据库的某一个或多个业务表的结构,生成对应的Entity.java、Dao.java、Service.java、Controller.java、Mapper.xml文件2023-08-07 17:06:271
2022年freemarker还有人用吗
有。1,基本上,FREEMAKER可以替代JSP了freemarker现在用途很多。2、CMS系统的模板。3、生成其他文本类型的模板(比如代码生成器等)。4、替代JSPfreemarker相对JSP的优势在于,越是复杂的页面,freemarker的效率相比JSP就越高。2023-08-07 17:06:411
如何在Eclipse中安装Freemarker编辑器插件?
一、打开打开eclipse的help选项在选项当中找到install new software的子选项然后点击。二、在点击add后弹出的窗口中填写:NamefreeMarkerLocation:http://download.jboss.org/jbosstools/updates/JBossTools-3.0.3.GA三、在搜索表中打开第一个节点选择FreeMarker IDE后大约三分钟重启后可以完成安装。FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。其特点是通用性高,模板语言强大。能够生成各种文本:HTML、XML、RTF、Java源代码等等。Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。2023-08-07 17:06:481
jsp中freemarker 数字格式化
一 使用内建函数 c 特点 不管其表现形式是怎样的( 例如" " " " " " " " " ") 只要小数分割符是 它就能转化成计算机能够识别的字符串形式 而且都是 计算机处理的时候是没有那些所谓的千位分隔符的(空格或逗号) 而且计算机支持的最大的小数点后面的位数是 位 目前来说 已经够我们用了 用法: 假设strmun是一个字符串形式的数字 则可以这样写 ${strnum?c} 例如${" "?c} 值为 可能用处 对一些表单允许用户按照个人习惯输入数字 提交的时候统一转换 二 使用预定义的数字格式 有四种预定义的数字格式 分别是puter(跟内建函数c功能一样 用法不一样) currency(货币格式) number(数字格式) percent(百分比形式) 特点 这些格式的明确含义是本地化(国家)指定的 受 Java 平台安装环境所控制 而不是 FreeMarker 所以不建议用这些函数 而且受默认数字格式的影响 用法不灵活 三 使用类似于Java中数字格式语法形式 特点 例如" #" 左边的 的个数代表整数部分最少为多少位 右边 #"的个数代表小数部分最多为多少位;例如" ## #"表示整数部分的千位分割符是 小数部分最多保留两位 最少保留一位;例如" ##%"以百分比的形式表示 小数部分最多两位 用法: 假设strnum是一个数字 则可以这样写${strnum?string(" ## #")} 例如${ ?string(" ## #")} 值为 注意 数字格式是本地化敏感的 不过我们一般都会给freemarker设置默认的本地化语言 问题不大 可能用处 当在某一个地方突然要用到数字格式时 调用 string 函数是可以的 当在很多地方都需要用到数字格式是 这样处理太麻烦了 可以考虑设置默认的数字格式化形式 四 局部设置 特点 如果在某个页面 或者某几个页面(其它页面可import进来) 用到的数字格式化是相同的 可考虑统一配置数字的格式化形式 用法 只需在用到需要格式化的数字之前 设置就可以了 格式如下 <#setting number_format=" ## ##"> 其中" ## ##"的内容是采用类似于java中数字格式的语法形式 也就是以上的第三点 注意 如果用在一个页面 则整个页面默认就是那种格式 除非用string函数覆盖了默认的格式 同样的 如果放在一个公共的页面 其它页面只要include它 也会是同样的格式 五 全局设置 特点 在所有的页面都默认提供数字的格式化形式 用法 (针对spring) 在freemarker的配置文件中设置其默认的数字格式化形式 如下 代码如下 < property name = "freemarkerSettings" > < props> < prop key = "number_format"> ## 六 舍入处理 有几种舍入处理方式 分别是 round floor ceiling 和string(" ") 特点 前面三种 从字面上很好理解 我们也经常使用 要说的最后一种 先看一个例子 ?string(" ")和 ?string(" ") 的值都是 说明如下 在金融和统计学中 四舍五入都是根据所谓的一半原则 这就意味着对最近的“邻居”进行四舍五入 除非离两个邻居距离相等 这种情况下 它四舍五入到偶数的邻居 如果你注意看 和 的四舍五入的话 这在上面的示例中是可以看到的 两个都被四舍五入到 因为 是偶数 但 和 是奇数 用法 假设strnum是一个数字 则可以这样写${strnum?round(floor/ceiling)} 或者${strmun?string(" ")} 可能用法 可用在一些对数字精确度不高的情况(分页处理时也许有用) 一些对小数敏感的 还是用 string函数 例如 ${num?string( )} 如果小数点后不足两位 用 代替 ${num?string( # ## )} 如果小数点后多余两位 就只保留两位 否则输出实际值 输出为 ${num?string( ### )} 输出为 整数部分每三位用 分割 并且保证小数点后保留两位 不足用 代替 ${num?string( ### ## )} 输出为 整数部分每三位用 分割 并且小数点后多余两位就只保留两位 不足两位就取实际位数 可以不不包含小数点 ${num?string( )} 输出为 整数部分如果不足三位( ) 前面用 补齐 否则取实际的整数位 ${num?string( ### )} 等价于 ${num?string( # )} 输出为 freemarker数字格式化带来的操作问题 freemarker在解析数据格式的时候 自动默认将数字按 为分割( ) 这个问题给操作带来一定的额外处理复杂度 解决方法有如下几种 在模板中直接加 toString()转化数字为字符串 如 ${languageList id toString()}; 在freemarker配置文件freemarker properties加 <#setting number_format="#">或者 <#setting number_format=" ">; 在模板中直接加<#setting number_format="#">或者<#setting number_format=" "> 如 <#if AdminLanguagePaginationMsg?exists> <#setting number_format="#"> 对于数字的格式化 可采用strng 和number_format 设置 数字格式化的优先级 string优先级最高 配置文件配置的优先级最低 在页面setting的优先级在两者之间 lishixinzhi/Article/program/Java/JSP/201311/200012023-08-07 17:07:091
Jsp 和Freemarker 各自的优点:
jsp是大家最熟悉的技术优点:1、功能强大,可以写java代码2、支持jsp标签(jsp tag)3、支持表达式语言(el)4、官方标准,用户群广,丰富的第三方jsp标签库5、性能良好。jsp编译成class文件执行,有很好的性能表现缺点:jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。velocity是较早出现的用于代替jsp的模板语言优点:1、不能编写java代码,可以实现严格的mvc分离2、性能良好,据说比jsp性能还要好些3、使用表达式语言,据说jsp的表达式语言就是学velocity的缺点:1、不是官方标准2、用户群体和第三方标签库没有jsp多。3、对jsp标签支持不够好freemarker优点:1、不能编写java代码,可以实现严格的mvc分离2、性能非常不错3、对jsp标签支持良好4、内置大量常用功能,使用非常方便5、宏定义(类似jsp标签)非常方便6、使用表达式语言缺点:1、不是官方标准2、用户群体和第三方标签库没有jsp多选择freemarker的原因:1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。2、宏定义比jsp tag方便3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便4、支持jsp标签5、可以实现严格的mvc分离2023-08-07 17:07:172
freemarker${1.1?int} 什么意思
是取1.1的整数部分,就如(1.1).int一样,内建函数以?代替了‘."而已2023-08-07 17:07:362
Freemarker 2.3.28
创建目录freemark然后,执行如下命令 官网: https://freemarker.apache.org/ FreeMarker是一个模板引擎; FreeMarker 模板用 FreeMarker Template Language(FTL)编写;1.0 创建配置对象 2.0 创建数据模型 3.0 获取模板 4.0 给模板绑定数据模型 运行结果:2023-08-07 17:07:461
freemarker中表达式 ${(user.name)!""}当user为空时,直接报错,咋回事?
user为空不报错才怪呢??user对象存在的时候,你才能访问它的属性 啊,否则有什么意义2023-08-07 17:07:563
freemarker 里 ?? 和 ? 都是什么意思?
是说编程吗? 如果是 一般? 都是为了传参2023-08-07 17:08:115
sitemesh和FreeMarker有什么区别
sitemesh和FreeMarker的区别如下:sitemesh 是个典型的装饰模式。可以把相同结构的页面配置一个装饰器,从而把可变的部分抽出来,这样某个业务只用关心的数据处理及显示。至于这部分用到哪个地方就由装饰器去负责。而freemarker 是个模板引擎。当然也可以通过一些 include, function 把页面相同的部分抽取出来达到类似的效果。它们之前主要的区别可以这么理解。用sitemesh 的话。你的某个action生成的页面,只要是局部就可以。比如生成一个数据显示的table,外面的html, header, footer这些都交给sitemesh 去装饰了。如果用freemarker的话。某个action生成的页面需要关注的是整个html, 只是你把header, footer, sidebar 这些抽取出来了而已。1、sitemeshSiteMesh 是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的。工作原理:SiteMesh是基于Servlet的filter的,即过滤流。它是通过截取response,并进行装饰后再交付给客户。其中涉及到两个名词: 装饰页面(decorator page)和 "被装饰页面(Content page)" , 即 SiteMesh通过对Content Page的装饰,最终得到页面布局和外观一致的页面,并返回给客户sitemesh运行环境需要:servlet, JDK 。2、FreeMarkerFreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。基本简介:FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据。外文名:FreeMarke类别:模板引擎特点:通用性高,模板语言强大2023-08-07 17:08:251
如何使用Freemarker生成java代码
Freemarker是一个模板框架。我们可以通过Freemarker进行代码生成或页面的静态生成。 现在简单的说一下怎样使用Freemarker Freemarker的主要生成类public boolean generate(String templateFileName, Map data,String fileName) {try {//取得模板的位置String templateFileDir=templateFileName.substring(0, templateFileName.lastIndexOf("/"));//取得模板的名字String templateFile=templateFileName.substring(templateFileName.lastIndexOf("/"), templateFileName.length());//取得生成文件的路径String genFileDir=fileName.substring(0, fileName.lastIndexOf("/")); Template template = ConfigurationHelper.getConfiguration(templateFileDir).getTemplate(templateFile); File fileDir=new File(genFileDir);org.apache.commons.io.FileUtils.forceMkdir(fileDir);File output = new File(fileName);if(output.exists()){//如何代码已存在不重复生成return false;} Writer writer = new FileWriter(output); template.process(data, writer);writer.close();} catch (TemplateException e) {e.printStackTrace();return false;} catch (IOException e) {e.printStackTrace();return false;}return true;}代码中的Map 是模板所需要的数据,我们可以通过面向对像的方法把数据存在模板中public boolean genDaoInterface(String fileName){DaoModel daoModel=new DaoModel();//设置Dao实现类的包名daoModel.setPackageName(DaoConstant.PACKAGE);//取得接口名String className=StringUtils.substringBefore(fileName,".");//设置接口名daoModel.setClassName(className);Map<String, Object> data = new HashMap<String, Object>(); data.put("model", daoModel);//设置生成的位置 String filePath=new String("src/"+package2path(DaoConstant.PACKAGE)+"/"+fileName);//代码生成 return super.generate(DaoConstant.INTERFACE_TEMPLATE, data, filePath);}data.put("model", daoModel);由这句代码可看出我们将可以在模板中直接调用这些数据package ${model.packageName};public interface ${model.className} extends BaseHibernateDao {}2023-08-07 17:08:331
freemarker怎么判断变量是否等于字符串?
如:变量abc是字符串类型,但可能为null,如何判断它是否等于"名称"呢?<#if abc=="名称">是 //如果为空则报错;<#if abc!""="名称">是 //报错,说结果不是布尔值。用freemarker怎么判断某个字符串是否存在某子串?使用index_of函数进行判断,如果存在则返回索引所在位置,否则返回-1<#if arcontent.content?index_of("<img>")!=-1>。。。。。。。。。。</#if>2023-08-07 17:08:411
freemarker 和的 beetl 比较,哪些有所欠缺吗
看了一下beetl的介绍,低侵入性有点名不副实,还有模板语法里直接print的,这样侵入性明显增加了啊。自定义标签真心吹毛求疵了,至少使用Java的IDE,freemarker的标签都不会造成什么障碍。使用js语法,这个挺好的,freemarker很多函数的定义都有点反人类了。不过对于最常用的逻辑:循环和判断,我觉得freemarker那种标签形式要好于js方式,写循环和判断,层数一深简直要人命啊,<%}}}}%>这种,还没法对齐!至于性能,提高总是好的,看了一下比较,0.02ms与0.01ms的区别,这个在大多数情况下多没啥意义吧?更何况模板引擎渲染也并非底层操作,一个正常Web页面响应都在50ms以上吧?万分之一的提高而已,反正我觉得吸引力不大。安全输出挺不错的,mvc的分离也是不错的尝试(freemarker确实也可以单独进行渲染,只不过API不是那么有好罢了)。freemarker这种成熟引擎,最大的优点倒不在于其性能多优越,功能多强大,而是业界公认,工具链完善,像我在Intellij里面编辑freemarker,语法检查、自动补全乃至于重构都是很方便的,我觉得要做一个模板引擎,也要从这方面考虑考虑。2023-08-07 17:08:551
freemarker嵌套循环怎么写
首先,freemarker的ftl指令里没有for循环这个用法,因为freemarker是一种纯粹的视图技术,不允许在ftl页面里写任何Java代码。其次,如果只是想迭代输出的话,你可以用<#list/>这个标签。再次,如果你是在Struts2中用freemarker的话,还可以引用struts2标签库的<s:iterator/>标签来实现相同功能,但首先要引入Struts2的标签库。2023-08-07 17:09:021
如何在freemarker中获得当前时间?
/** * 根 据传入的日期时间格式,在页面上直接取得当前时间的格式化结果 * 如果格式为空或者错误,将返回yyyy-MM-dd HH:mm:ss * 页面调用${datetime("yyyy")}/${datetime("yyyy")} * @see com.yourcompany.ExtendedFreemarkerManager#createConfiguration * @author Sunshine * */ public class DatetimeMethod implements TemplateMethodModel { private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss"; @SuppressWarnings("unchecked") public Object exec(List args) throws TemplateModelException { Date date = new Date(); String pattern = args.get(0).toString(); try { return new SimpleDateFormat(pattern).format(date); } catch (RuntimeException e) { return new SimpleDateFormat(DEFAULT_PATTERN).format(date); } } } 四、页面调用${datetime("yyyy年M月d日")}2023-08-07 17:09:103
如何用freemarker动态生成word目录
首先,通过xml模板可以将基本上所有的格式都事先锁定,包括页码和分页,只要你事先预设好就能够通过freemarker实现生成,接下来就是我这个问题了,目录怎么解决,下面是解决思路:1:目录的内容可以根据之前其他的内容一样解决,通过XML模板预先设置好,2:目录的页码已经研究过是不能直接通过xml模板实现动态对应了(至少我没搞定0.0)3:由于不能够一步到位,我采取了在模板中预留了一页空白页,只留了抬头的目录两个字,然后通过查询目录二字进行目录的生成,这个功能也是我刚刚折腾出来的0.0目前还没测试能不能用模板生成目录后再更新目录0.0,不过想想可以直接生成目录应该就不用这么麻烦了,至于word生成后的修改0.0我觉得还是以后再说吧.....整体来说应该还算完美解决了,代码我就不在这贴出来了~虽然中间折腾了半天走了半天弯路~讲道理还是用的jacob来实现的。。2023-08-07 17:10:071
freemarker查看对象有哪些属性
步骤如下:①创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生成模板实例。②使用Configuration实例来生成Template实例,同时需要指定使用的模板文件。③填充数据模型,数据模型就是一个Map对象。④调用Template实例的process方法完成合并。根据上面步骤,下面提供一个使用FreeMarker创建输出的Java程序,该程序代码如下:public class HelloFreeMarker{ //负责管理FreeMarker模板文件的Configuration实例 private Configuration cfg; //负责初始化Configuration实例的方法 public void init() throws Exception { //初始化FreeMarker配置 //创建一个Configuration实例 cfg = new Configuration(); //设置FreeMarker的模板文件位置 cfg.setDirectoryForTemplateLoading(new File("templates")); } //处理合并的方法 public void process() throws Exception { //创建数据模型 Map root = new HashMap(); root.put("name", "FreeMarker!"); root.put("msg", "您已经完成了第一个FreeMarker的实例!"); //使用Configuration实例来加载指定模板 Template t = cfg.getTemplate("test.flt"); //处理合并 t.process(root, new OutputStreamWriter(System.out)); } public static void main(String[] args) throws Exception { HelloFreeMarker hf = new HelloFreeMarker(); hf.init(); hf.process(); }}上面代码创建了一个Map实例root,这个root将作为模板文件的数据模型,在该数据模型中存储了两个key-value对,其中第一个是name,第二个是msg,这两个key都有对应的value,这两个value将会填充到模板中对应的插值处。虽然FreeMarker可以在Java中使用,但大部分时候FreeMarker都用于生成HTML页面。下面介绍在Web应用中使用FreeMarker,用Servlet来合并模板和数据模型,下面是Servlet应用中的代码:public class HelloServlet extends HttpServlet{ //负责管理FreeMarker模板文件的Configuration实例 private Configuration cfg; //负责初始化Configuration实例的方法 public void init() throws Exception { //初始化FreeMarker配置 //创建一个Configuration实例 cfg = new Configuration(); //设置FreeMarker的模板文件位置 cfg.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/templates"); } //生成用户响应 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建数据模型 Map root = new HashMap(); root.put("message", "Hello FreeMarker!"); //使用Configuration实例来加载指定模板,即:取得模板文件 Template t = cfg.getTemplate("test.flt"); //开始准备生成输出 //使用模板文件的charset作为本页面的charset //使用text/html,MIME-type response.setContentType("text/html; charset=" + t.getEncoding()); Writer out = response.getWriter(); //合并数据模型和模板,并将结果输出到out中 try { t.process(root, out); } catch(TemplateException e) { throw new ServletException("处理Template模板中出现的错误", e); } }}2023-08-07 17:10:141
如何使用freemarker框架,将不同模板生成的内容整合到一个word文档中
首先,通过xml模板可以将基本上所有的格式都事先锁定,包括页码和分页,只要你事先预设好就能够通过freemarker实现生成,接下来就是我这个问题了,目录怎么解决,下面是解决思路:1:目录的内容可以根据之前其他的内容一样解决,通过XML模板预先设置好,2:目录的页码已经研究过是不能直接通过xml模板实现动态对应了(至少我没搞定0.0)3:由于不能够一步到位,我采取了在模板中预留了一页空白页,只留了抬头的目录两个字,然后通过查询目录二字进行目录的生成,这个功能也是我刚刚折腾出来的0.0目前还没测试能不能用模板生成目录后再更新目录0.0,不过想想可以直接生成目录应该就不用这么麻烦了,至于word生成后的修改0.0我觉得还是以后再说吧..整体来说应该还算完美解决了,代码我就不在这贴出来了~虽然中间折腾了半天走了半天弯路~讲道理还是用的jacob来实现的。2023-08-07 17:10:241
谁知道 用freemarker 导出word时,如何使导出word的格式,默认为doc格式
将要导出的Word另存为xml格式的文件,打开xml 在其中添加freemarker标签,然后另存为outChairDoc.ftl文件.第一步要加入Freemarker.jar包。Servlet代码如下:在outChairDoc.ftl放在包cn.skyclass.jiaowu.freemarker.template下public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); try { createDoc(response); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }}public void createDoc(HttpServletResponse response) throws Exception {// 要填入模本的数据文件 Map dataMap = new HashMap(); dataMap.put("docTitle", "fdfdfdfdfdfdf用户信息"); List<ChairInfo> list = new ArrayList<ChairInfo>(); ChairInfo chairInfo = new ChairInfo(); chairInfo.setChairTitle("dfdfd"); chairInfo.setTeacherName("tea"); chairInfo.setStartTime(new Date()); chairInfo.setPlace("dfdfd"); list.add(chairInfo); dataMap.put("chairInfoList", list); // 设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,// 这里我们的模板是放在com.havenliu.document.template包下面configuration.setClassForTemplateLoading(this.getClass(),"/cn/skyclass/jiaowu/freemarker/template");Template t = null;try {// test.ftl为要装载的模板 t = configuration.getTemplate("outChairDoc.ftl"); t.setEncoding("utf-8"); } catch (IOException e) {e.printStackTrace();}// 输出文档路径及名称 String fileName="讲座列表.doc"; response.setContentType("application/msword"); response.addHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));//可防止导出的文件乱码response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();t.process(dataMap, out);out.close();}2023-08-07 17:10:331
freemaker把换行转成了空格怎么处理
freemaker把换行转成了空格可以尝试以下几种方法。1、使用Freemarker的noescape指令,将模板内容中的换行符进行转义。2、使用HTML标签的换行符替代符号“”代替换行符。3、在Freemarker模板中使用CSS实现换行,例如:在样式表中定义p标签的white-space属性为pre-wrap,然后在模板中使用p标签来显示文本。2023-08-07 17:10:401
Velocity 和 FreeMarker在并发情况下,哪个性能更好
其实从功能上来说三者都是彼此彼此的;1/velocity早apache上很久都没出更新了,freemarker一直都有更新而且手册还有中文版的,可以算其中一个优点吧;2/jsp本省就可以算一个模板了,优点就是有sun/oracle的支持;3/velocity相对freemarker来说就是能直接调用对象方法,到底是不是优点各持己见,关乎于你对mvc概念的理解4/其实彼此性能差别不大,等你的站点到达上1000w或者更高在去考虑性能问题吧,小站点是好用上手快2023-08-07 17:10:481
怎么在freemarker中显示List中包涵List
定值程序如下:[#list arrayList as c][#if c_index == 1]第二项的值[/#if][/#list]FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。2023-08-07 17:10:551
用freemarker 做判断的时候 有没有 一个字符串包含另外一个字符的
程序错误 要么重新弄 或者把原码给我 帮你弄 谢谢 望采纳2023-08-07 17:11:032
freemarker.core.InvalidReferenceException异常?
一般出现这种异常的原因为:如果对象为空,则freemarker就会抛出这个异常。其实解决很简单,在用对象之前先判空,不空在进行属性的获取操作即可。catalogs.objectCaptionTag 这个没有定义,应该是属性值你没有定义2023-08-07 17:11:101
java freemarker list嵌套
2楼貌似是正确的2023-08-07 17:11:454
vue和freemarker什么区别
这完全是两种东西。Tomcat是一个Web容器。用来运行Servlet和JSP的。Freemarker是一种模块程序,可以用来代替JSP做显示页面用。2023-08-07 17:11:542
freemarker中下拉列表取值问题
<select type="text" name="notification.type" value="${notification.type}" /> <#if ${notification.type}==1> <option value="1" selected>重大网络故障</option> <option value="2">新闻</option> <option value="3">信息发布</option> <#else if ${(notification.type==2)}> <option value="1">重大网络故障</option> <option value="2" selected>新闻</option> <option value="3">信息发布</option> <#else ${(notification.type==3)}> <option value="1">重大网络故障</option> <option value="2">新闻</option> <option value="3" selected>信息发布</option> </#if> <select>结构if elseif elseif if 改为if elseif else if2023-08-07 17:12:021
freemarker标签如何判断list不为空???
ftl命令,有相关的文档你可以去看.我不知道你这个bean的属性<#list 获取的list对象 as item> $ </#list>id为item这种类型bean的属性. 如果是struts2的话,可以直接获取list对象,如果是struts1或是别的什么就要把list放入session中.2023-08-07 17:12:104
freemarker如何读取js变量
什么需求要获取js变量???2023-08-07 17:12:203
如何在freemarker中调用java的方法
1 要想使用Freemarker支持的自定义方法,需要实现freemarker.template.TemplateMethodModel接口或 TemplateMethodModelEx接口参考示例如下:java 代码:public class Object2HashMap implements TemplateMethodModelEx { private static final Logger logger = LoggerFactory.getLogger(Object2HashMap.class); @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public Object exec(List arguments) throws TemplateModelException { Collection collection = (Collection) DeepUnwrap.unwrap((TemplateModel) arguments.get(0)); String keyProperty = arguments.get(1).toString(); String valueProperty = arguments.get(2).toString(); HashMap result = new HashMap(); if (collection == null) return result; for (Object object: collection) { try { Object key = PropertyUtils.getProperty(object, keyProperty); Object value = PropertyUtils.getProperty(object, valueProperty); result.put(key, value); } catch (Exception e) { logger.error("处理异常", e); } } return result; }}freemarker使用示例,通过new()创建该对象。参考示例是 将wsdl的扩展字段 key,value值放到HashMap中。<#assign chineseAmount = "com.ccic.gateway.core.freemarker.encoder.ChineseAmountEncoder"?new()object2hash = "com.ccic.gateway.core.freemarker.encoder.Object2HashMap"?new()insuredExtendHash = object2hash(payload.responseBody.policy.extend, "key", "value")> 取值:${(insuredExtendHash.ApproverCName)!}2023-08-07 17:12:291
freemarker怎么使用CSS样式表以及JS文件
freemarker文件还是html代码占多数,即使是freemarker代码,也会经过服务器翻译成html代码返回到浏览器端,所以说,你可以在freemarker文件里,直接用html的语法引入CSS和JS。说白了,freemarker只是辅助你写html文件而已,你当做写html文件就行了,不用想那么复杂。如下代码,只有标记到的地方是freemarker语法,其余都是html语法<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><!-- 这句是freemaker --><title>${webSite.title!}</title><!-- 这句的base是freemaker,其余不是 --><script src="${base}/resource/plugin/require/require.js"></script></head><body><!-- 这句的user.name是freemaker,其余不是 --><h1>欢迎您,${user.name}</h1><!-- 这句是freemaker --><#include "body.html"></body></html>2023-08-07 17:12:371
freemarker 和的 beetl有哪些区别?
看了一下beetl的介绍,低侵入性有点名不副实,还有模板语法里直接print的,这样侵入性明显增加了啊。自定义标签真心吹毛求疵了,至少使用Java的IDE,freemarker的标签都不会造成什么障碍。使用js语法,这个挺好的,freemarker很多函数的定义都有点反人类了。不过对于最常用的逻辑:循环和判断,我觉得freemarker那种标签形式要好于js方式,写循环和判断,层数一深简直要人命啊,<%}}}}%>这种,还没法对齐!至于性能,提高总是好的,看了一下比较,0.02ms与0.01ms的区别,这个在大多数情况下多没啥意义吧?更何况模板引擎渲染也并非底层操作,一个正常Web页面响应都在50ms以上吧?万分之一的提高而已,反正我觉得吸引力不大。安全输出挺不错的,mvc的分离也是不错的尝试(freemarker确实也可以单独进行渲染,只不过API不是那么有好罢了)。freemarker这种成熟引擎,最大的优点倒不在于其性能多优越,功能多强大,而是业界公认,工具链完善,像我在Intellij里面编辑freemarker,语法检查、自动补全乃至于重构都是很方便的,我觉得要做一个模板引擎,也要从这方面考虑考虑。2023-08-07 17:12:441
freemarker怎么在双引号里使用
1. 模板+数据模型=输出2. 数据模型a) 类似目录的变量称为hashes,包含保存下级变量的唯一的查询名字,充当其它对象的容器,每个都关联唯一的查询名字b) 类似文件的变量称为scalars,保存单值,有两种类型i. 字符串:用引号括起,单引号or双引号ii. 数字:不用引号iii. 日期:可以是日期,时间或日期-时间iv. 布尔值:true或false,通常在<#if …>标记中使用v. 对scalars的访问从root开始,各部分用”.”分隔,如 animals.mouse.pricec) 另外一种变量是sequences,和hashes类似,充当其它对象的容器,按次序访问,只是不使用变量名字,而使用数字索引,如animals[0].name,索引值从0开始d) 通常每个变量具有上述的一种能力,但一个变量可以具有多种上述能力e) 方法i. ${avg(3,5,20)} ${avg(student.zhangyaang.age,student.situ.age)}f) 宏和变换器:用户自定义的指令(FTL标记)g) 节点:树形结构中的一个节点,常用于xml处理中3. 模板a) 文本:直接输出b) ${…}:称为interpolations,FreeMarker会在输出时用实际值代替,或#{},只用于文本中c) FTL标记:类似于HTML,为了与HTML区分,用#开始,有的以@开始,不会输出,区分大小写,FTL标记不能位于另一个FTL标记内部d) 注释:<#--和-->,不会输出e) 多余的空白字符会在模板输出时移除f) 指令i. 使用FTL标记引用指令,有三种FTL标记1. 开始标记:<#name prarm>2. 结束标记:</#name>3. 空内容指令标记:<#name param />ii. 有两种类型的指令:预定义指令和用户定义指令,用户定义指令要用@替换#iii. FTL标记不能够交叉,应该正确嵌套iv. 如果使用不存在的指令,FreeMarker会产生错误消息v. < , </ 和指令间不允许有空白字符g) 表达式i. 字符串1. 使用单引号或双引号限定2. 特殊字符要转义3. raw字符串,可以认为是文本,其中的$和{等不具有特殊含义,该类字符串在引号前面加r,如${r”${foo}”} ${r”c:foobar”}ii. 数字1. 直接输入,不需要引号2. 精度数字使用”.”分隔,不能使用分组符号3. 不支持科学计数法4. 不能省略小数点前面的05. 数字8 ,+8 ,08和8.00 都是相同的iii. 布尔值:true 和 false, 不使用引号iv. 序列1. 有逗号分隔的子变量列表,有方括号限定,如:<#list [“winter”, ”spring”, ”summer”, ”autumn”] as x>${x}</#list>2. 列表的项目是表达式,如:[2+2, [1,2,3,4], ”whatnot”]3. 可以使用数字范围定义数字序列,如:2..5等同于[2,3,4,5] 注意:数字范围没有方括号 如:5..24. 散列(hash) 由逗号的键/值列表,有大括号限定,键和值之间用冒号分隔{“name”:”zhangyang”,”age”:23} 键和值都是表达式,但键必须是字符串v. 获取变量1. 顶层变量:${variable}, 变量名只能是字母, 数字, 下划线, $, @ 和# 的组合, 不能以数字开头2. 从散列中获取数据a) school.student.nameb) school.[“student”].namec) school[“student”][“name”]说明:使用点语法,变量名有顶层变量一样的限制, 方括号语法没有该限制3. 从序列获(sequences)得数据: 和散列的方括号语法一样, 只是方括号的表达式值必须是数字; 注意: 第一个项目的索引是04. 序列片段: 使用[startIndex..endIndex]语法, 从序列中获得片段(也是序列)5. 特殊变量: FreeMarker内定义的变量, 使用 .variablenae 语法访问vi. 字符串操作1. Interpolation(或连接操作)a) 可以使用${..} 或#{..} 在文本部分插入表达式的值,如${“Hello ${user}”} 等于 ${“Hello”+user}b) ${..} 只能用于文本部分, 不用于FTL表达式中2. 子串假设user的值为”tom cat”${user[0]}${user[4]} ? tc${user[1..4]} ? om cvii. 序列操作连接操作: 和字符串一样, 用”+”<#list [“joe”,”fred”] + [“julia”,”kate”] as user>${user}</#list>viii. 散列操作连接操作: 和字符串一样, 用”+”, 如果有相同的key, 右边的值替换左边的值(后面的替换前面的), 如<#assign ages = {“joe”:23,”fred”:25} + {“joe”:30,”julia”:23}></#assign> 结果: joe的值为30ix. 算术运算1. +, -- , *, /, %${x / 2}2. 操作符两边必须是数字3. 使用 “+” 操作符时,如果一边是数字, 一边是字符串, 就会自动将数字转换为字符串, 如: ${3+”4”} 结果 344. 使用内建的 int 获得整数部分${1.1?int} ?1${1.999?int} ?1${(5/2)?int} ?25. 比较操作符a) 使用=(或==,完全相等)测试两个值是否相等, 使用!=测试两个值是否不相等b) = 和!= 两边必须是相同类型的值c) FreeMarker是精确比较,”x”,”x “和”x”是不等的d) 对数字和日期可以使用<, <=, >, 和>=, 但不用用于字符串e) 由于FreeMarker 会将>解释成FTL标记的结束字符, 所以对于>和>=可以使用括号来避免这种情况, 如<#if (x > y)>f) e)的一种替代方法, 使用lt, lte, gt 和gte来替代6. 逻辑操作符a) &&(and), ||(or), !(not), 只能用于布尔值<#if x < 13 && color = “green”>…</#if><#if ! man>woman</#if>7. 内建函数a) 内建函数的用法类似访问散列的子变量, 只是用”?”|替代”,”b) 用于字符串i. html: 对字符串进行html编码ii. cap_first: 将字符串转换成第一个字母大写iii. lower_case: 小写iv. upper_case: 大写v. trim: 去掉字符串前后的空白字符c) 用于序列i. size: 获得序列中元素的数目d) 用于数字i. int: 取得数字的整数部分e) 例子:test = “tom & jerry”${test?html} ? tom & jerry${test?upper_case?html} ? TOM & JERRY8. 操作符优先顺序h) Interpolation(只用于文本部分)i. Interpolation有两种类型1. 通用Interpolation: ${expr}a) 插入字符串值: 直接输出表达式结果b) 插入数字值: 根据缺省格式(由#setting指令设置)将表达式转换成文本输出; 可以使用内建函数string格式化单个Interpolationc) 例子<#setting number_format=”currency”/> ?金额<#assign answer=43/>${answer} ? $43.00${answer?string} ?$43.00${answer?string.number} ?43${answer?string.currency} ?$43.00${answer?string.percent} ?4,300%2. 数字Interpolation: ${expr} 或#{expr ; format}3. 插入日期: 根据缺省格式(#setting) 将表达式结果转换成文本输出; 可以使用内建的函数string 格式化单个Interpolation, 例子:${update?string(“yyyy-MM-dd HH:mm:ss zzzz”)}4. 插入布尔值: 说明同上<#assign foo = true/>${foo?string(“yes”,”no”)} ?yes5. 数字Interpolation的#{expr ; format}形式可以用来格式化数字, format可以是a) mX: 小数部分最小X位b) MX: 小数部分最大X位c) 例子<#assign x=2.364/><#assign y=4/>#{x; M2} ?2.36#{y; M2} ?4#{x; m1} ?2.4#{y; m1} ?4.0i) 例子i. if指令<#if zhangyang.age < situ.age>Situ is order<#else>Zhangyang is order</#if>ii. list指令 <#list students[0..5] as s_list></#list>取list的前5条记录<table border = “1”><tr><td>name</td><td>age</td><#list students as s_list><td>${s_list.name}</td><td>${s_list.age}</td></#list></tr></table>iii. include指令<#include “/all/header.html”>…<#include “/all/footer.html”>iv. 应用<table><#list students as s_list><tr><td><#if s_list.sex =”man”><img src=”/img/boy.gif”/><#else><img src=”/img/girl.gif/></#if>${s_list.name}</td><td>${s_list.age}</td></tr></#list></table>2023-08-07 17:12:531
Freemarker变量赋值问题
不要用>,小于 大于 在freemarker里面都是用gt lt来表示的,正确的写法应该是<#macro pager totalPage curPage=1 showPageNum=10> <#if (showPageNum gt totalPage)> <#assign showPageNum = totalPage-1><br/> </#if>${showPageNum}</#macro>2023-08-07 17:13:002
什么是 FreeMarker
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据2023-08-07 17:13:191
Freemarker中判断怎么解释?
这行代码的意思是:如果A存在,且A的值为0,那么...执行下面的代码2023-08-07 17:13:283
freemarker和jstl的区别
JSTL是SUN推出的标准,它不依赖与任何框架,只要将jar包引入,并在页面中引入即可使用,JSTL的流行依赖于它强大的标签库。而FREEMARKER是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据。2023-08-07 17:13:351
freemarker和jsp的区别
运行机制就不大一样,jsp是编译成继承自servlet的class文件,运行jsp就是运行一个servlet而freemarker就是套模板,通过模板+内容直接生成HTML然后输出从开发角度来说freemarker 自带一套模板语言,语法实现更简单直观,而且可以通过marco宏编写控件,如果宏无法满足,freemarker也还提供了很多JAVA扩展接口。而JSP不管JSTL还是其他,都是靠taglib实现的,taglib的效率其实并不高,所以在复杂页面的渲染上 ,freemarker会明显高于jsp同时 ,freemarker也不仅仅局限于B/S应用,可以广泛应用到比如代码生成、票据打印模板等各个方面2023-08-07 17:13:451
freemarker和"jsp"的不同?
"freemarker"和"jsp"的区别和联系有:一、jsp优点:1、功能强大,可以写java代码2、支持jsp标签(jsp tag)3、支持表达式语言(el)4、官方标准,用户群广,丰富的第三方jsp标签库5、性能良好。jsp编译成class文件执行,有很好的性能表现缺点:jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。二、freemarker优点:1、不能编写java代码,可以实现严格的mvc分离2、性能非常不错3、对jsp标签支持良好4、内置大量常用功能,使用非常方便5、宏定义(类似jsp标签)非常方便6、使用表达式语言缺点:1、不是官方标准2、用户群体和第三方标签库没有jsp多选择freemarker的原因:1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。2、宏定义比jsp tag方便3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便4、支持jsp标签5、可以实现严格的mvc分离2023-08-07 17:13:521
freemarker如何判断字符是否为空
freemarker中显示某对象使用${name}.??但如果name为null,freemarker就会报错。如果需要判断对象是否为空:<#if name?>……</#if>??当然也可以通过设置默认值${name!""}来避免对象为空的错误。如果name为空,就以默认值(“!”后的字符)显示。??对象user,name为user的属性的情况,user,name都有可能为空,那么可以写成${(user.name)!""},表示user或者name为null,都显示为空。判断为空<#if (user.name)?>……</#if>??2023-08-07 17:14:061
freemarker和bootstrap的区别
运行机制就不大一样,jsp是编译成继承自servlet的class文件,运行jsp就是运行一个servlet而freemarker就是套模板,通过模板+内容直接生成HTML然后输出从开发角度来说freemarker 自带一套模板语言,语法实现更简单直观,而且可以通过marco宏编写控件,如果宏无法满足,freemarker也还提供了很多JAVA扩展接口。而JSP不管JSTL还是其他,都是靠taglib实现的,taglib的效率其实并不高,所以在复杂页面的渲染上 ,freemarker会明显高于jsp同时 ,freemarker也不仅仅局限于B/S应用,可以广泛应用到比如代码生成、票据打印模板等各个方面2023-08-07 17:14:141
"freemarker"和"jsp"的不同?
"freemarker"和"jsp"的区别和联系有:一、jsp优点:1、功能强大,可以写java代码2、支持jsp标签(jsp tag)3、支持表达式语言(el)4、官方标准,用户群广,丰富的第三方jsp标签库5、性能良好。jsp编译成class文件执行,有很好的性能表现缺点:jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。二、freemarker优点:1、不能编写java代码,可以实现严格的mvc分离2、性能非常不错3、对jsp标签支持良好4、内置大量常用功能,使用非常方便5、宏定义(类似jsp标签)非常方便6、使用表达式语言缺点:1、不是官方标准2、用户群体和第三方标签库没有jsp多选择freemarker的原因:1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。2、宏定义比jsp tag方便3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便4、支持jsp标签5、可以实现严格的mvc分离2023-08-07 17:14:231
使用freemarker怎么在截取字符串
String[] a = 你自己的字符串.split({}) 可以了你可以试试。那个是 过滤 掉 一些字符。而你用的是截取 字符。两个方法不一样。效果应该一样2023-08-07 17:14:482
freemarker和的beetl有哪些区别?
看了一下beetl的介绍,低侵入性有点名不副实,还有模板语法里直接print的,这样侵入性明显增加了啊。自定义标签真心吹毛求疵了,至少使用Java的IDE,freemarker的标签都不会造成什么障碍。使用js语法,这个挺好的,freemarker很多函数的定义都有点反人类了。不过对于最常用的逻辑:循环和判断,我觉得freemarker那种标签形式要好于js方式,写循环和判断,层数一深简直要人命啊,<%}}}}%>这种,还没法对齐!至于性能,提高总是好的,看了一下比较,0.02ms与0.01ms的区别,这个在大多数情况下多没啥意义吧?更何况模板引擎渲染也并非底层操作,一个正常Web页面响应都在50ms以上吧?万分之一的提高而已,反正我觉得吸引力不大。安全输出挺不错的,mvc的分离也是不错的尝试(freemarker确实也可以单独进行渲染,只不过API不是那么有好罢了)。freemarker这种成熟引擎,最大的优点倒不在于其性能多优越,功能多强大,而是业界公认,工具链完善,像我在Intellij里面编辑freemarker,语法检查、自动补全乃至于重构都是很方便的,我觉得要做一个模板引擎,也要从这方面考虑考虑。2023-08-07 17:14:561
如何编写freemarker文件
将要导出的Word另存为xml格式的文件,打开xml 在其中添加freemarker标签,然后另存为outChairDoc.ftl文件.第一步要加入Freemarker.jar包。Servlet代码如下:在outChairDoc.ftl放在包cn.skyclass.jiaowu.freemarker.template下public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {configuration = new Configuration();configuration.setDefaultEncoding("utf-8");try {createDoc(response);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void createDoc(HttpServletResponse response) throws Exception {// 要填入模本的数据文件Map dataMap = new HashMap();dataMap.put("docTitle", "fdfdfdfdfdfdf用户信息");List<ChairInfo> list = new ArrayList<ChairInfo>();ChairInfo chairInfo = new ChairInfo();chairInfo.setChairTitle("dfdfd");chairInfo.setTeacherName("tea");chairInfo.setStartTime(new Date());chairInfo.setPlace("dfdfd");list.add(chairInfo);dataMap.put("chairInfoList", list);// 设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,// 这里我们的模板是放在com.havenliu.document.template包下面configuration.setClassForTemplateLoading(this.getClass(),"/cn/skyclass/jiaowu/freemarker/template");Template t = null;try {// test.ftl为要装载的模板t = configuration.getTemplate("outChairDoc.ftl");t.setEncoding("utf-8");} catch (IOException e) {e.printStackTrace();}// 输出文档路径及名称String fileName="讲座列表.doc";response.setContentType("application/msword");response.addHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));//可防止导出的文件乱码response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();t.process(dataMap, out);out.close();}2023-08-07 17:15:041
freemarker 和的 beetl 比较,哪些有所欠缺吗
看了一下beetl的介绍,低侵入性有点名不副实,还有模板语法里直接print的,这样侵入性明显增加了啊。自定义标签真心吹毛求疵了,至少使用Java的IDE,freemarker的标签都不会造成什么障碍。使用js语法,这个挺好的,freemarker很多函数的定义都有点反人类了。不过对于最常用的逻辑:循环和判断,我觉得freemarker那种标签形式要好于js方式,写循环和判断,层数一深简直要人命啊,<%}}}}%>这种,还没法对齐!至于性能,提高总是好的,看了一下比较,0.02ms与0.01ms的区别,这个在大多数情况下多没啥意义吧?更何况模板引擎渲染也并非底层操作,一个正常Web页面响应都在50ms以上吧?万分之一的提高而已,反正我觉得吸引力不大。安全输出挺不错的,mvc的分离也是不错的尝试(freemarker确实也可以单独进行渲染,只不过API不是那么有好罢了)。freemarker这种成熟引擎,最大的优点倒不在于其性能多优越,功能多强大,而是业界公认,工具链完善,像我在Intellij里面编辑freemarker,语法检查、自动补全乃至于重构都是很方便的,我觉得要做一个模板引擎,也要从这方面考虑考虑。2023-08-07 17:15:111
用freemarker怎么判断某个字符串是否存在某子串
使用index_of函数进行判断,如果存在则返回索引所在位置,否则返回-1<#if arcontent.content?index_of("<img>")!=-1> 。。。。。。。。。。</#if>2023-08-07 17:15:181