2020-04-21 23:47

@INFECTION_K 使用 enjoy 生成 XML 是非常合适的场景

有些人用的 String 拼接,很容易出错,代码可读性差。有些人用操作 XML 的那套 API 生成 XML,比 String 拼接还要惨

2020-04-21 23:19

tomcat 对于 jfinal 中的 WriterBuffer 的误报,关键看这里:
21-Apr-2020 15:58:36.142 SEVERE [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [ROOT] created a ThreadLocal with key of type [com.jfinal.template.io.WriterBuffer$2]

参考这个贴子:
https://jfinal.com/feedback/4720

你给出的日志比较奇怪,因为这个误报只会是 INFO 或者是 WARNING 这个级别,但你这里是 SEVERE 级别,这个就很不正常了

估计是你的 tomcat 在关闭或者重启时没有真正关闭或重启成功,造成了资源泄漏

2020-04-21 11:04

@杜福忠 在 java 代码层面,传入一个 Kv 对象,里头放一些需要用到的参数,然后在模板中通过 #set(...) 或者调用 kv 传递过来的对象,就可以在 java 与 template 之间传递数据了,包括传回返回值

2020-04-21 01:23

正在建生态频道,即将推出

2020-04-21 01:22

@Code_Cat 打成 jar 包以后, java -jar xxx.jar 即可运行

2020-04-20 16:36

下载首页的 jfinal_demo_for_maven.zip, 里头有一个 doc 目录, 其中的一个子目录里面介绍了如何打成可运行的 jar 包

2020-04-20 16:05

你也可以用一个 handler 处理一下:
public class MyHandler extends Handler {
public void handle(String target ,HttpServletRequest req, HttpServletResponse resp, boolean[] isHandle) {
if ( target.startWith("/v1/cart//")) {
target = target.replace("/v1/cart//", "/v1/cart/");
}

next.handle(target, req, resp, isHandled);
}
}

最后再配置一下:
me.add(new MyHandler());

2020-04-20 16:03

这种路径没有关系,你可以多创建一个 action 支持 /v1/cart//64491,然后里头啥也不干,用 forwardAction 转发到你现在写的那个 action 就行,大致如下:

// 你现在的 action 如下
public void cart() {
...
}

// 你新创建的 action 如下:
@ActionKey("/v1/cart//)
public void justForward() {
forwardAction("/v1/cart")
}

一点也不耽误

2020-04-20 16:00

回看你分享的这个用法, 用模板来生成 json ,核心妙处在于模板表达出来的信息可读性极度清晰,妙不可言

2020-04-20 15:58

@杜福忠 今天发现有个同学使用 enjoy 有了创新的用法:enjoy 用于实现动态配置 + 动态规则

具体是该同学有个业务系统,经常要搞些促销活动,不同的会员要有不同的折扣之类的逻辑,大致演示如下:

### 下面的代码设计默认折扣,该配置可根据活动策划动态调整
#( configObject.setDefaultDiscount("" ) )

### 下面代码代替 java 代码的功能,实现打哲规则制定
#if ( 用户是 xxx 类型)
#set( returnDiscount = ...)
#else if (....)
#set( returnDiscount = ...)
#else
#set( returnDiscount = ...)
#end

上面两段代码,分别存放在两个不同的模板文件中,第一个相当于实现了动态配置文件,配置完成后利用 enjoy 的 devMode 实时加载生效

第二个相当于将部分业务规则动态化

以上用法的好处是,经常变动的配置与逻辑规则可以不用改 java 代码,更不用打包、部署,也不用重启项目就可以实现需求的变化

人民群众的智慧是无限的 ^_^

2020-04-20 15:44

@不失沉默 可以不加,但是得先调用 getFile()

道理还是一样的,发送请求的格式变了

2020-04-20 13:54

能获取一个 Session session 对象,单步调试看看这个 Session 是不是 HttpSession 类型

2020-04-20 11:25

Paths、Files 这两个用得极好,经常没想起来这两个好用的工具类,点赞 + 收藏

感谢分享

2020-04-20 00:25

这种细节问题一定要单步高试定位原因,没人猜得到是什么原因

2020-04-19 11:06

renderFile( "test.xls", "test.xls");