public class Engine extends Object
| 限定符和类型 | 字段和说明 |
|---|---|
static String |
MAIN_ENGINE_NAME |
| 构造器和说明 |
|---|
Engine()
Create engine without management of JFinal
|
Engine(String engineName)
Create engine by engineName without management of JFinal
|
| 限定符和类型 | 方法和说明 |
|---|---|
Engine |
addDirective(String directiveName,
Class<? extends Directive> directiveClass)
添加自定义指令,keepLineBlank 使用默认值
|
Engine |
addDirective(String directiveName,
Class<? extends Directive> directiveClass,
boolean keepLineBlank)
添加自定义指令
建议添加自定义指令时明确指定 keepLineBlank 变量值,其规则如下:
1:keepLineBlank 为 true 时, 该指令所在行的前后空白字符以及末尾字符 '\n' 将会被保留
一般用于具有输出值的指令,例如 #date、#para 等指令
2:keepLineBlank 为 false 时,该指令所在行的前后空白字符以及末尾字符 '\n' 将会被删除
一般用于没有输出值的指令,例如 #for、#if、#else、#end 这种性质的指令
示例:
addDirective("now", NowDirective.class, true)
|
Engine |
addEnum(Class<? extends Enum<?>> enumClass)
添加枚举类型,便于在模板中使用
例子:
1:定义枚举类型
public enum UserType {
ADMIN,
USER;
public String hello() {
return "hello";
}
}
2:配置
engine.addEnum(UserType.class);
3:模板中使用
### 以下的对象 u 通过 Controller 中的 setAttr("u", UserType.ADMIN) 传递
#if( u == UserType.ADMIN )
#(UserType.ADMIN)
#(UserType.ADMIN.name())
#(UserType.ADMIN.hello())
#end
|
static void |
addExtensionMethod(Class<?> targetClass,
Class<?> extensionClass) |
static void |
addExtensionMethod(Class<?> targetClass,
Object objectOfExtensionClass) |
static void |
addFieldGetter(int index,
FieldGetter fieldGetter)
添加 FieldGetter 实现类到指定的位置
系统当前默认 FieldGetter 实现类及其位置如下:
GetterMethodFieldGetter ---> 调用 getter 方法取值
RealFieldGetter ---> 直接获取 public 型的 object.field 值
ModelFieldGetter ---> 调用 Model.get(String) 方法取值
RecordFieldGetter ---> 调用 Record.get(String) 方法取值
MapFieldGetter ---> 调用 Map.get(String) 方法取值
ArrayLengthGetter ---> 获取数组长度
根据以上次序,如果要插入 IsMethodFieldGetter 到 GetterMethodFieldGetter
之后的代码如下:
Engine.addFieldGetter(1, new IsMethodFieldGetter());
注:IsMethodFieldGetter 系统已经提供,只是默认没有启用。
|
static void |
addFieldGetterToFirst(FieldGetter fieldGetter) |
static void |
addFieldGetterToLast(FieldGetter fieldGetter) |
Engine |
addSharedFunction(ISource source)
Add shared function by ISource
|
Engine |
addSharedFunction(String... fileNames)
Add shared function by files
|
Engine |
addSharedFunction(String fileName)
Add shared function by file
|
Engine |
addSharedFunctionByString(String content)
Add shared function by string content
|
Engine |
addSharedMethod(Class<?> sharedMethodFromClass)
Add shared method from class
|
Engine |
addSharedMethod(Object sharedMethodFromObject)
Add shared method from object
|
Engine |
addSharedObject(String name,
Object object)
Add shared object
|
Engine |
addSharedStaticMethod(Class<?> sharedStaticMethodFromClass)
Add shared static method of Class
|
static Engine |
create(String engineName)
Create engine with engine name managed by JFinal
|
static Engine |
create(String engineName,
Consumer<Engine> e)
Create engine with engine name managed by JFinal
Example:
Engine engine = Engine.create("myEngine", e -> {
e.setDevMode(true);
e.setToClassPathSourceFactory();
});
engine.getTemplate("template.html").render(System.out);
>
|
static Engine |
createIfAbsent(String engineName,
Consumer<Engine> e)
Create engine if absent with engine name managed by JFinal
Example:
Engine engine = Engine.createIfAbsent("myEngine", e -> {
e.setDevMode(true);
e.setToClassPathSourceFactory();
});
engine.getTemplate("template.html").render(System.out);
>
|
String |
getBaseTemplatePath() |
String |
getDatePattern() |
boolean |
getDevMode() |
String |
getEncoding() |
EngineConfig |
getEngineConfig() |
String |
getName() |
ISourceFactory |
getSourceFactory() |
Template |
getTemplate(ISource source)
Get template by implementation of ISource
|
Template |
getTemplate(String fileName)
Get template by file name
|
Template |
getTemplateByString(String content)
Get template by string content and do not cache the template
|
Template |
getTemplateByString(String content,
boolean cache)
Get template by string content
重要:StringSource 中的 cacheKey = HashKit.md5(content),也即 cacheKey
与 content 有紧密的对应关系,当 content 发生变化时 cacheKey 值也相应变化
因此,原先 cacheKey 所对应的 Template 缓存对象已无法被获取,当 getTemplateByString(String)
的 String 参数的数量不确定时会引发内存泄漏
当 getTemplateByString(String, boolean) 中的 String 参数的
数量可控并且确定时,才可对其使用缓存
|
Template |
getTemplateByString(String content,
String cacheKey) |
int |
getTemplateCacheSize() |
static Engine |
remove(String engineName)
Remove engine with engine name managed by JFinal
|
void |
removeAllTemplateCache()
Remove all template cache
|
Engine |
removeDirective(String directiveName)
Remove directive
|
static void |
removeExtensionMethod(Class<?> targetClass,
Class<?> extensionClass) |
static void |
removeExtensionMethod(Class<?> targetClass,
Object objectOfExtensionClass) |
static void |
removeFieldGetter(Class<? extends FieldGetter> fieldGetterClass) |
Engine |
removeSharedMethod(Class<?> clazz)
Remove shared Method of the Class
|
Engine |
removeSharedMethod(Method method)
Remove shared Method
|
Engine |
removeSharedMethod(String methodName)
Remove shared Method by method name
|
Engine |
removeSharedMethod(String methodName,
Class<?>... paraTypes)
Remove shared Method
|
Engine |
removeSharedObject(String name) |
void |
removeTemplateCache(String cacheKey)
Remove template cache by cache key
|
Engine |
setBaseTemplatePath(String baseTemplatePath) |
Engine |
setBufferSize(int bufferSize) |
Engine |
setCacheStringTemplate(boolean cacheStringTemplate)
配置是否缓存字符串模板,也即是否缓存通过 getTemplateByString(String content)
方法获取的模板,默认配置为 false
|
static void |
setChineseExpression(boolean enable)
设置为 true 支持表达式、变量名、方法名、模板函数名使用中文
|
Engine |
setCompressor(Compressor compressor)
配置 Compressor 可对模板中的静态内容进行压缩
可通过该方法配置自定义的 Compressor 来代替系统默认实现,例如:
engine.setCompressor(new MyCompressor());
|
Engine |
setCompressorOn()
设置开启压缩功能。
|
Engine |
setCompressorOn(char separator)
设置开启压缩功能
|
Engine |
setDatePattern(String datePattern) |
Engine |
setDevMode(boolean devMode)
设置 true 为开发模式,支持模板文件热加载
设置 false 为生产模式,不支持模板文件热加载,以达到更高的性能
|
Engine |
setEncoderFactory(EncoderFactory encoderFactory)
Enjoy 模板引擎对 UTF-8 的 encoding 做过性能优化,某些罕见字符
无法被编码,可以配置为 JdkEncoderFactory 解决问题:
engine.setEncoderFactory(new JdkEncoderFactory());
|
Engine |
setEncoding(String encoding) |
static void |
setFastFieldKeyBuilder(boolean enable) |
static void |
setFastMode(boolean fastMode)
设置极速模式
极速模式将生成代理对象来消除 java.lang.reflect.Method.invoke(...)
|
static void |
setMainEngine(Engine engine)
Set main engine
|
Engine |
setOutputDirectiveFactory(OutputDirectiveFactory outputDirectiveFactory)
Set output directive factory
|
Engine |
setReentrantBufferSize(int reentrantBufferSize) |
Engine |
setReloadModifiedSharedFunctionInDevMode(boolean reloadModifiedSharedFunctionInDevMode)
Engine 独立设置为 devMode 可以方便模板文件在修改后立即生效,
但如果在 devMode 之下并不希望对 addSharedFunction(...),
添加的模板进行是否被修改的检测可以通过此方法设置 false 参进去
注意:Engine 在生产环境下(devMode 为 false),该参数无效
|
Engine |
setRoundingMode(RoundingMode roundingMode)
设置 #number 指令与 Arith 中浮点数的舍入规则,默认为 RoundingMode.HALF_UP "四舍五入"
|
Engine |
setSourceFactory(ISourceFactory sourceFactory)
设置 ISourceFactory 用于为 engine 切换不同的 ISource 实现类
ISource 用于从不同的来源加载模板内容
配置为 ClassPathSourceFactory 时特别注意:
由于 JFinal 会在 configEngine(Engine me) 方法调用 “之前”,会默认调用一次如下方法:
me.setBaseTemplatePath(PathKit.getWebRootPath())
而 ClassPathSourceFactory 在以上默认值下不能工作,所以需要通过如下方式清掉该值:
me.setBaseTemplatePath(null)
或者配置具体要用的 baseTemplatePath 值,例如:
me.setBaseTemplatePath("view");
|
Engine |
setStaticFieldExpression(boolean enable)
设置为 true 支持静态属性访问表达式,自 jfinal 5.0.2 版本开始默认值为 false
|
Engine |
setStaticMethodExpression(boolean enable)
设置为 true 支持静态方法调用表达式,自 jfinal 5.0.2 版本开始默认值为 false
|
Engine |
setToClassPathSourceFactory()
设置为 ClassPathSourceFactory 的快捷方法
|
Engine |
setToJdkEncoderFactory()
配置为 JdkEncoderFactory,支持 utf8mb4,支持 emoji 表情字符,
支持各种罕见字符编码
|
String |
toString() |
static Engine |
use()
Using the main Engine
|
static Engine |
use(String engineName)
Using the engine with engine name
|
public Engine()
public Engine(String engineName)
public static Engine use()
public static Engine create(String engineName)
public static Engine createIfAbsent(String engineName, Consumer<Engine> e)
Example:
Engine engine = Engine.createIfAbsent("myEngine", e -> {
e.setDevMode(true);
e.setToClassPathSourceFactory();
});
engine.getTemplate("template.html").render(System.out);
>public static Engine create(String engineName, Consumer<Engine> e)
Example:
Engine engine = Engine.create("myEngine", e -> {
e.setDevMode(true);
e.setToClassPathSourceFactory();
});
engine.getTemplate("template.html").render(System.out);
>public static Engine remove(String engineName)
public static void setMainEngine(Engine engine)
public Template getTemplateByString(String content)
public Template getTemplateByString(String content, boolean cache)
content - 模板内容cache - true 则缓存 Template,否则不缓存public Engine addSharedFunctionByString(String content)
public Engine addEnum(Class<? extends Enum<?>> enumClass)
例子:
1:定义枚举类型
public enum UserType {
ADMIN,
USER;
public String hello() {
return "hello";
}
}
2:配置
engine.addEnum(UserType.class);
3:模板中使用
### 以下的对象 u 通过 Controller 中的 setAttr("u", UserType.ADMIN) 传递
#if( u == UserType.ADMIN )
#(UserType.ADMIN)
#(UserType.ADMIN.name())
#(UserType.ADMIN.hello())
#end
public Engine setOutputDirectiveFactory(OutputDirectiveFactory outputDirectiveFactory)
public Engine addDirective(String directiveName, Class<? extends Directive> directiveClass, boolean keepLineBlank)
示例:
addDirective("now", NowDirective.class, true)
public Engine addDirective(String directiveName, Class<? extends Directive> directiveClass)
public Engine addSharedMethod(Object sharedMethodFromObject)
public Engine addSharedMethod(Class<?> sharedMethodFromClass)
public Engine addSharedStaticMethod(Class<?> sharedStaticMethodFromClass)
public Engine removeSharedMethod(String methodName)
public Engine removeSharedMethod(Class<?> clazz)
public Engine removeSharedMethod(String methodName, Class<?>... paraTypes)
public void removeTemplateCache(String cacheKey)
public void removeAllTemplateCache()
public int getTemplateCacheSize()
public String getName()
public EngineConfig getEngineConfig()
public Engine setDevMode(boolean devMode)
public boolean getDevMode()
public Engine setCacheStringTemplate(boolean cacheStringTemplate)
public Engine setSourceFactory(ISourceFactory sourceFactory)
配置为 ClassPathSourceFactory 时特别注意:
由于 JFinal 会在 configEngine(Engine me) 方法调用 “之前”,会默认调用一次如下方法:
me.setBaseTemplatePath(PathKit.getWebRootPath())
而 ClassPathSourceFactory 在以上默认值下不能工作,所以需要通过如下方式清掉该值:
me.setBaseTemplatePath(null)
或者配置具体要用的 baseTemplatePath 值,例如:
me.setBaseTemplatePath("view");
public Engine setToClassPathSourceFactory()
public ISourceFactory getSourceFactory()
public String getBaseTemplatePath()
public String getDatePattern()
public String getEncoding()
public Engine setRoundingMode(RoundingMode roundingMode)
public Engine setEncoderFactory(EncoderFactory encoderFactory)
public Engine setToJdkEncoderFactory()
public Engine setBufferSize(int bufferSize)
public Engine setReentrantBufferSize(int reentrantBufferSize)
public Engine setCompressorOn(char separator)
separator - 压缩使用的分隔符,常用配置为 '\n' 与 ' '。
如果模板中存在 javascript 脚本,需要配置为 '\n'
两种配置的压缩率是完全一样的public Engine setCompressorOn()
public Engine setCompressor(Compressor compressor)
public Engine setReloadModifiedSharedFunctionInDevMode(boolean reloadModifiedSharedFunctionInDevMode)
public static void addExtensionMethod(Class<?> targetClass, Object objectOfExtensionClass)
public static void addExtensionMethod(Class<?> targetClass, Class<?> extensionClass)
public static void removeExtensionMethod(Class<?> targetClass, Object objectOfExtensionClass)
public static void removeExtensionMethod(Class<?> targetClass, Class<?> extensionClass)
public static void addFieldGetter(int index,
FieldGetter fieldGetter)
public static void addFieldGetterToLast(FieldGetter fieldGetter)
public static void addFieldGetterToFirst(FieldGetter fieldGetter)
public static void removeFieldGetter(Class<? extends FieldGetter> fieldGetterClass)
public static void setFastFieldKeyBuilder(boolean enable)
public static void setFastMode(boolean fastMode)
public static void setChineseExpression(boolean enable)
public Engine setStaticMethodExpression(boolean enable)
public Engine setStaticFieldExpression(boolean enable)
Copyright © 2024. All rights reserved.