2016-07-25 08:54

@海哥 可否直接将比较知名的 wordpress 模板,先人工处理一下,变成 JPress 的模板库? 然后 JPress 官网提供一个 wordpress 模板频道,让用户可以下载使用这些人工转换过的模板

2016-07-24 18:18

如果是要控制某个用户在某个时间段内发送的消息数量,给个简单的方案:
1:使用 jfinal 提供的 EhcachePlugin 插件,记录用户发送消息的数量

2:关键在于配置缓存的空闲时间,假定需要控制用户在 10 分钟内的发送总量
a:配置 timeToIdleSeconds = 600,表示该缓存空闲 10 分钟后会自动清除,所谓空闲是指缓存没有被使用过的时间段。在你的业务中,也即表示用户没有在发送消息的时间长度的过期时间
b:配置 timeToLiveSeconds = 0,表示缓存最大存活时间为无穷大,也即表示过期时间全部交给前面的 timeToIdelSencond 来控制

3:当用户发消息过来时,先用Integer msgCount = CacheKit.get("msgCount", userName) 获取到的是用户发送的消息总量,如果超出允许的消息数量,则阻止发送,
否则允许发送。

4:使用 CacheKit.put("msgCount", msgCount + 1) 将发送量加 1 并缓存,当 msgCount 为 null 时,取值为 0 即可。

5:此方案的好处是既控制了发送量,也兼顾了时间段控制,如果用户超过 10 分钟没有再发送,缓存会自动失效,又再重头记数。此方案还有一个好处是时间段是动态的,时间段总是与最近的空闲时间关联,而不是与过去某个固定的时间点关联,也控制了一直在发消息的行为

2016-07-24 16:31

@飞羽 此外生产环境,可以设置 me.setDevMode(false),这样的话 JFinal action report 就不会输出了,性能会有所提升

2016-07-24 16:02

@海哥 这才没多长时间,JPress 就这么强大了,不敢想象再过几个月的样子

2016-07-24 15:31

@飞羽 有请求过来,url 为 "/",但你的 "/" 是对应不到某个 action 上的,所以会报这个警告,可通过配置 log4j.properties 中的日志级别为 error,来消除 warn 级的日志信息。

此外,还看到你上面的请求 Method 为 index,UrlPara 也为 index,建议去除 url 中的 "index" 字符串, "index" 是默认action method name,是不需要写在 url 中的

2016-07-24 15:24

@海哥 看到这个 3 个用 JPress 搭建的网站,我看到了 JPress 的前景,太牛逼了

2016-07-24 12:13

将 json string 反向解析成 Model,需要 model 具有 setter、getter 方法才可以,用一下 jfinal 官方首页提供的 Generator demo 改一下配置即可为 model 生成 getter、setter。生成完了以后,项目运行时是可以不需要连接数据库的。

2016-07-24 12:10

有设置缓存,并且缓存是根据微信官方的 7000 秒来设置的,或许是你的程序在调用 API 时绕过了缓存去获取,也或许是多实例部署时没有共享缓存,造成了各自去获取时后一个实例获取到的 token 让前一个实例的失效了,仔细检查一下。 @Dreamlu

2016-07-24 11:27

jfinal 2.3 会考虑添加一个文件被写入到哪个目录的输出信息

2016-07-24 11:26

文件已经生成了,只不过是路径配置错误找不到而已,建议单步调试一下 writeFile(...) 方法,看文件到底被写在了哪个路径下,然后再调整一下目录

2016-07-24 11:24

@zqbc main 方法启动项目的一个本质特征就是默认不会去 WEB-INF/classes 加载类文件,而是从类似于 build/classes、bin 这样的路径下去读,所以 jfinal 手册第一章中用图片 + 文字就说明了要改掉 Default output folder

2016-07-24 11:23

@zqbc 如果你在 eclipse 外部直接启动 tomcat 、jetty,则不涉及到此问题。在 eclipse 中启动 jetty,本质上是用的一个 public void main 方法,无论你是配置的 com.final.core.JFinal 还是手动创建的 main 再 JFinal.start(...) 这都是 main 方法启动的

2016-07-24 11:21

@zqbc 我干脆直接说明错误原因吧:
1:在用 eclipse 创建 web 项目时,eclipse 默认会将编译后的 class 文件放在 build\classes 这个目录下面
2:而 web 项目在启动时默认会去 WEB-INF/class 下面去加载 class 文件
3:jfinal 手册中建议的大家启动 jetty 方式本质上是用一个 main 方法启动 jetty
4:问题来了,main 方法启动项目时会首先去 build/classes 读取类文件并加载,接下来 jetty 被启动,jetty、tomcat 这类 web 容器会去 WEB-INF/class 下面去加载 classes 文件
5:核心在于:main 方法从 build/classes 目录下面先加载了 JFinalDemoConfig,而 jetty 是从 WEB-INF/classes 下面加载的 JFinalDemoConfig,虽然名字一模一样,但却是不同的 class
6:所以 jfinal 手册中图文并茂地交待过在创建项目时,要将Default Output folder 中的 build/classes,改成 WebRoot/WEB-INF/classes
千言万语一句话:main 方法启动加载的 class 与在后续启动 jetty 后加载的 class 处于不同的目录之下,造成了冲突。这个问题如果不用 main 方法启动项目是不可能出现的