当前位置: 首页 > 工具软件 > JFinal > 使用案例 >

jfinal使用

晁绍辉
2023-12-01

jfinal是基于java语言的web+orm框架,具有许多优点。手册下载地址:http://www.jfinal.com/man

maven坐标:

<dependency>
	<groupId>com.jfinal</groupId>
	<artifactId>jfinal</artifactId>
	<version>1.5</version>
</dependency>
web.xml:

<!-- jfinal-filter -->
<filter>
	<filter-name>jfinal_filter</filter-name>
	<filter-class>com.jfinal.core.JFinalFilter</filter-class>
	<init-param>
		<param-name>configClass</param-name>
		<param-value>com.xxx.Config</param-value><!--继承自JFinalConfig的自定义的Config类-->
	</init-param>
</filter>
<filter-mapping>
	<filter-name>jfinal_filter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
Config类:

其中,ActiveReceord 中定义了 addMapping(String tableName, Class<? extends Model> modelClass>)方法,该方法建立了数据库表名到 Model 的映射关系

public class Config extends JFinalConfig {

	//此方法用来配置JFinal的常量值
	@Override
	public void configConstant(Constants constants) {
		// 开发者模式,正式部署时关闭
		constants.setDevMode(true);
		constants.setBaseViewPath("/WEB-INF/freemarker");
		// 设置常用错误页面
		constants.setError500View("/WEB-INF/freemarker/errorPage/500.ftl");
		Configuration freeMarkerConfig = FreeMarkerRender.getConfiguration();
		try {
			// 将contentPath设置为freemarker共享变量 ctx:项目根目录
			freeMarkerConfig.setSharedVariable("ctx", JFinal.me()
					.getServletContext().getContextPath());
		} catch (TemplateModelException e) {
			throw new IllegalStateException(e);
		}
	}
    //用来配置JFinal的Handler
	@Override
	public void configHandler(Handlers handlers) {
	}

	//用来配置JFinal的Interceptor
	@Override
	public void configInterceptor(Interceptors interceptors) {
		interceptors.add(new SessionInViewInterceptor(true));
		interceptors.add(new LoginInterceptor());//自定义登陆拦截器
	}

	//用来配置JFinal的Plugin,C3P0数据库连接池插件,ActiveRecordPlugin数据库访问插件
	@Override
	public void configPlugin(Plugins plugins) {
		// 加载数据库和连接池相关的配置文件
		// 使用c3p0插件
		Properties properties = loadPropertyFile("config" + File.separator + "c3p0.properties");
		C3p0Plugin c3p0Plugin = new C3p0Plugin(properties);
		plugins.add(c3p0Plugin);
		ActiveRecordPlugin aPlugin = new ActiveRecordPlugin(c3p0Plugin);
		aPlugin.setDialect(new MysqlDialect());
		plugins.add(aPlugin);

		aPlugin.addMapping("user", User.class);
		aPlugin.addMapping("project", Project.class);
	}

	//配置JFinal访问路由
	@Override
	public void configRoute(Routes routes) {
		routes.add("/login", LoginController.class, "/login");
		routes.add("/user", UserController.class, "/user");
		routes.add("/project", ProjectController.class, "/project");
	}

}
接下来,LoginController部分代码:

render渲染不同的类型的视图返回到客户端,此处视图类型为Freemarker。

可以在Config类的configConstant类中设置视图类型 :constants.setViewType(ViewType.FREE_MARKER);

public class LoginController extends Controller {
	@ClearInterceptor(ClearLayer.ALL)
	@ActionKey("/")  //使用了@ActionKey("/"),actionKey由原来的‘/login/index’变为了‘/login’
	public void index() {
		render("index.ftl");
	}
最后,发布项目,访问:http://localhost/项目名称/login  将默认访问控制器的index方法,返回index.ftl页面。

访问http://localhost/项目名称/login/login  将访问控制器中的login方法。

待续。。。




 类似资料: