freemarker自定义指令 怎么获取参数

freemarker自定义指令 怎么获取参数,第1张

在项目应用中,遇到这样一个问题,当文本过长时,需要将前面的文本省略一部分,用…代替,而使用css只能在文本最后加…

我们可以通过freemarker自定义指令的方式实现上述功能。

freemarker自定义指令需要继承TemplateDirectiveModel接口,

Java代码 收藏代码

package comnexusyfreemarkerdirective;

import javaioIOException;

import javautilMap;

import freemarkercoreEnvironment;

import freemarkertemplateSimpleScalar;

import freemarkertemplateTemplateDirectiveBody;

import freemarkertemplateTemplateDirectiveModel;

import freemarkertemplateTemplateException;

import freemarkertemplateTemplateModel;

public class EllipsisDirective implements TemplateDirectiveModel {

@Override

public void execute(Environment env, @SuppressWarnings("rawtypes") Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)

throws TemplateException, IOException {

String text = "";

int length = 0;

if(paramsget("text") != null){

text = ((SimpleScalar) paramsget("text"))getAsString();

}

if(paramsget("length") != null){

length = IntegervalueOf(((SimpleScalar) paramsget("length"))getAsString());

}

if(length < textlength()){

text = "" + textsubstring(textlength() - length);

}

envgetOut()write(text);

}

}

然后在springmvc配置文件中配置该指令

Xml代码 收藏代码

<bean id="ellipsis" class="comnexusyfreemarkerdirectiveEllipsisDirective" />

<bean id="freemarkerConfig"

class="orgspringframeworkwebservletviewfreemarkerFreeMarkerConfigurer">

<property name="templateLoaderPath" value="/" />

<property name="freemarkerSettings">

<props>

<prop key="datetime_format">yyyy-MM-dd</prop>

<prop key="number_format">0##</prop>

<prop key="url_escaping_charset">UTF-8</prop>

<prop key="output_encoding">UTF-8</prop>

<prop key="template_exception_handler">ignore</prop>

</props>

</property>

<property name="freemarkerVariables">

<map>

<entry key="xml_escape" value-ref="fmXmlEscape" />

<entry key="ellipsis" value-ref="ellipsis" />

</map>

</property>

<property name="defaultEncoding" value="UTF-8" />

</bean>

在模版中使用

Html代码

<@ellipsis text="1234567" length="6"></@ellipsis>

struts2 freemarker request session parameter

使用Request里的Attribute值最简单的方法就是直接${AttributeName}或者安全一点:${AttributeName!"default Value"}

3取request范围的对象

${RequestmyRequestAttribute} 或者 : ${RequestmyRequestAttribute!"default value"}

4取request parameter范围的对象

${ParametersmyParameter} 或者 : ${ParametersmyParameter!"default value"}

5取context parameter范围的对象

${stackfindValue('#myContextParam')}

request 对象直接对应 >

freemark的好处有以下几点:

可以彻底的分离表现层和业务逻辑。

可以提高开发效率。

使得开发过程中的人员分工更加明确。

同时也有些缺点:

应用FreeMarker模板技术,在修改模板后,可能会看到已经过期的数据。如:生成静态的HTML页面后,如果一旦模板改变,而没有及时更新模板生成的HTML页面的话,用户看到的就是过期的数据。

FreeMarker模板技术在应用过程中,FreeMarker中的变量必须要赋值,如果不赋值,那么就会抛出异常。想避免错误就要应用if/elseif/else 指令进行判段,如果对每一个变量都判断的话,那么则反而增加了编程的麻烦。

FreeMarker的map限定key必须是string,其他数据类型无法 *** 作。

FreeMarker不支持集群应用。为了编成的方便性,把序列化的东西都放到了Session中,如Session,request等,在开发的过程中确实方便,但如果将应用放到集群中,就会出现错误。

freemarker在生成模板的时候,当前数据模型的上下文是个SimpleHash 的hash结构,{a=1,b=2,},我猜想题主是想遍历一下{}中所有的变量,但是在当前上下文这个{}在ftl中是没有名字的,所以没有办法在ftl中通过${name}的方式拿到整个数据模型上下文;

但是可以通过Debug跟踪源码的方式获得,我通常的做法是(SpringMVC+Freemarker):在FreeMarkerView的processTemplate(Template template, SimpleHash model, >

不知道session是否可以取,你的session第一个字母大写了何不再action中加一个url属性,再使用<result>${url}</result>来实现AngelAndAngel 写道你这样 你在action里面定义一个String sessionId的变量,然后在方法里边赋值sessionId=你的sessionid;然后把配置改为<result type="freemarker">[b]${sessionId}[/b]/defaulthtm</result> 不行,依然是取不到。其实我这个地方就是想实现多套模版的功能。不同语言采用不同的模版。所以定义了这个路劲。 问题补充:AngelAndAngel 写道应该是没问题啊 晕type="freemarker"严重: Servletservice() for servlet default threw exceptionjavaioFileNotFoundException: Template /defaulthtm not found上面的路径都是配好的,在action里面都打印出来了 问题补充:AngelAndAngel 写道你设置的session属性 有get和set方法吗这个是struts2必须的,呵呵,ognl嘛,在页面上我都能取到这个值呢,我就纳了闷了,我很早以前就这么整过,当时还是webwork呢。奇怪的很。 问题补充:AngelAndAngel 写道那是你文件路径没找到?我再整整。

以上就是关于freemarker自定义指令 怎么获取参数全部的内容,包括:freemarker自定义指令 怎么获取参数、javaEE开发中如何在freemarker模板里使用httpservletrequest的属性、java 用freemark的好处等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9463772.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存