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 方法启动项目是不可能出现的

2016-07-24 10:28

@海哥,你的 JPress 搭建起来真是不错啊,感谢 @城南往事123

2016-07-23 18:57

建议在项目频道发布出一个项目来,jfinal 社区随后会添加上项目的评论功能

2016-07-23 17:03

最简单快速的办法是将 jfinal demo 跑起来,然后在 JFinalFilter 中设置一个断点,单步调试 jfinal 源码,看执行流程,很快就搞清楚了。当然,此前先看看 jfinal 手册中的架构图,了解一下大致的用法会更好

2016-07-23 17:02

@airwolf 感谢支持,更好用的新功能即将上线,还有无数好用的功能在开发列表中,jfinal 社区将打造成极致用户体验的极速开发社区

2016-07-23 11:27

@sdfsf 写了很多,那就多思考虑,单步调试一下 jfinal 源码,搞清楚 jfinal 的执行过程,深入了解架构设计

2016-07-23 11:07

@sdfsf 这个周末会抓紧时间开发完成极度重要的功能,社区信息交互体验更好,功能更强大,多多关注社区发展

2016-07-23 10:49

简单理解为启动和关闭 java 虚拟机就好,tomcat 的启动本质也是启动的 java 虚拟机。而 JFinal.start(...) 也是启动 java 虚拟机,JFinal.start(...) 处于 main 方法中,main 方法正是 java 程序启动的入口。

2016-07-23 10:47

@sdfsf 先打好基础,然后,多写代码,多思考,多看优秀的开源项目。有个关键点,不要迷信那些很有知名度的开源项目,要时刻保有颗批判的心去看待世间一切,包括看待 jfinal。jfinal 项目也是以此心态为依托,不断否定自我,不断提升,才有了今天的海量用户。

2016-07-22 21:20

@yigegeman 多多支持 jfinal 社区

2016-07-22 18:04

如果你没有使用 maven,最简单的一个使用方法,将配置文件放在源代码的根目录下,例如你的源代码根目录是 src,那就放这里就行了。用的时候,不需要路径,直接:PropKit.use("config.txt");

如果你在要放在 src 的某个子目录下面,例如: "src/abc/config.txt" 这样用:PropKit.use("abc/config.txt");

2016-07-22 18:00

jfinal 会自动去类路径的根目录下去找配置文件,这个路径也就是 maven 中的 resource 目录,所以,只需要将配置文件放在 resource 目录或者 java 源代码同样的路径下就可以。用的时候不需要使用路径名:PropKit.use("a_little_config.txt");

当然,也可以在我前面提到的路径下面添加子目录,用的时候这样:PropKit.use("xxx/a_little_config.txt");

2016-07-22 17:57

保存之前,使用 model.remove("tag_type_id") 移除一下就好,如果需要移除的字段非常多并且保留的字段少,可以使用 model.keep(a, b,... n) 来指定需要要保留的字段。此外 model.remove(...) 也是支持同时移除多个字段的: model.remove(a, b, ..., n)

2016-07-22 17:54

@yigegeman 目前 N 多功能正在完善中,会逐步完善的,建设一个用户体验好的社区是个长期的事情,常来社区逛逛,关注下动态,不定期有惊喜