JFinal之JFinal学习日记

原创
2015/04/11 15:04
阅读数 1.5K

环境说明:

JFinal版本:jfinal-1.9.jar

Maven:apache-maven-3.1.1

Tomcat:apache-tomcat-6.0.41(有时也会用Jetty)

(不定期更新)


(2015/04/10-javagoboy)

1、报错 

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContextat com.jfinal.server.JettyServer.doStart(JettyServer.java:87)
at com.jfinal.server.JettyServer.start(JettyServer.java:64)
at com.jfinal.core.JFinal.start(JFinal.java:159)
at com.demo.jfinal.main.JFinalStart.main(JFinalStart.java:20)

解决方法:在Maven的pom.xml文件中加入:

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-webapp</artifactId>
    <version>8.1.8.v20121106</version>
</dependency>

2、JFinal的路由配置?

route.add("/", IndexController.class,"/");
route.add("/helloworld", HelloWorldController.class," /WEB-INF/views/helloworld"); //路径写出WEB-INF

    如果这样配置,那么http://localhost:8080/ 和http://localhost:8080/helloworld都是跳转到index()。

    假如我的Controller是这么写的:

public class HelloWorldController extends Controller {
    public void index() {
        renderText("JFinal Demo!");
    }
    //@ActionKey("helloworld")
    public void helloworld() {
    //renderText("Hello JFinal.");
    String message = "JFinal,My Friend!";
        setAttr("helloworld", message);
        renderFreeMarker("helloworld.html");
    }
}

    为啥我路由按照下面这么配置,路由配置如下:

route.add("/helloworld", HelloWorldController.class," /WEB-INF/views/helloworld"); 
route.add("/helloworld/helloworld", HelloWorldController.class," /WEB-INF/views/helloworld");

    老是警告我:

Warnning!!!
ActionKey already used: "/helloworld/helloworld"

    按照手册上说的,ControllerKey对应到的是index(),那我ControllerKey设置为“helloworld”,"/helloworld/helloworld"不是应该对应于 helloworld()吗?难道ControllerKey不能和Action方法重名?

    当然在我的尝试过后,我发现如果我把后面一个路由配置注释掉之后,访问http://localhost:8080/demojfinal/helloworld是对应到index(),而http://localhost:8080/demojfinal/helloworld/helloworld对应的是helloworld(),可能一个Controller只需要在路由里面配置一个入口地址即可了吧。

3、 JFinal项目部署Jetty启动运行是出现如下红色字体:

2015-04-10 21:16:39.188:INFO:oejw.StandardDescriptorProcessor:NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
Null identity service, trying login service: null
Finding identity service: null

    解决办法: 在Maven的pom.xml文件中加入:

<dependency>
   <groupId>org.eclipse.jetty</groupId>
   <artifactId>jetty-jsp</artifactId>
   <version>8.1.8.v20121106</version>
</dependency>

4、JFinal项目部署Jetty运行后,访问一直报404?

5、JFinal的contextPath怎么设置?
解答:

public void configHandler(Handlers me) {
    me.add(new ContextPathHandler("contextPath"));//设置上下文路径
}

 


(2015/04/30-javagoboy)


6、JFinal如何删除表中全部数据?
1)方法一:查询出所有的记录然后逐个删除

 String selectAllSql = "select * from jfinal_user";
 List<User> userList = User.dao.find(selectAllSql);
 for(User user : userList) {
   user.delete();
 }

2)方法二:批量删除

 String sql = "delete from jfinal_user";
 List<String> sqlList = new ArrayList<String> ();
 sqlList.add(sql);
 Db.batch(sqlList, 10); //这种批处理即使设置了arPlugin.setShowSql(true);//控制台打印SQL,好像也不会打印出执行的SQL

 


(2015/05/16-javagoboy)

7、JFinal的事务应用

 

(2015/05/20-javagoboy)

8、JFinal在文件上传时报的错:Caused by: java.lang.NoClassDefFoundError: com/oreilly/servlet/multipart/FileRenamePolicy

解答:很明显是因为少了某个jar包,在网上找到FileRenamePolicy这个类所在的jar包cos.jar的Maven依赖

<dependency>
   <groupId>servlets.com</groupId>
   <artifactId>cos</artifactId>
   <version>05Nov2002</version>
</dependency>

修改pom.xml文件之后,再次运行发现上传文件成功了。

然后在Oschina上搜索相关的问题,看到这个帖子http://www.oschina.net/question/67067_47226,才知道原来JFinal在文件上传的时候需要cos.jar包的支持,在官网Download下来压缩文件中,文件夹jfinal-1.9-lib下的jfinal-1.9-库文件依赖及使用说明.txt中有提到这个包——5:cos-26Dec2008.jar 支持文件上传功能。

展开阅读全文
打赏
0
1 收藏
分享
加载中
你没有明白JFinal的路由原则,请仔细参看JFinal手册,或研究JFinal源码。。。
2015/04/12 19:38
回复
举报
更多评论
打赏
1 评论
1 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部