jfinal 创建html文件,JFinal使用技巧-Enjoy魔板代码生成器

^_^ 搞事情~ 要趁早!   demo生成器还不能满足你? 需要service 需要 Controller吗?

1~ 核心动力package com.momathink.tpp;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import com.jfinal.kit.Kv;

import com.jfinal.kit.PathKit;

import com.jfinal.template.Engine;

/***

* jfinal魔板引擎

* @author dufuzhong

*/

public class JfEnjoy {

/**

* 根据具体魔板生成文件

* @param templateFileName  模板文件名称

* @param kv                渲染参数

* @param filePath          输出目录

* @return

*/

public boolean render(String templateFileName, Kv kv, StringBuilder filePath)  {

BufferedWriter output = null;

try {

String baseTemplatePath = new StringBuilder(PathKit.getRootClassPath())

.append("/")

.append(PathKit.getPackagePath(this))

.append("/tpl")

.toString();

File file = new File(filePath.toString());

File path = new File(file.getParent());

if ( ! path.exists() ) {

path.mkdirs();

}

output = new BufferedWriter(new FileWriter(file));

Engine.use()

.setBaseTemplatePath(baseTemplatePath)

.getTemplate(templateFileName)

.render(kv, output);

return true;

} catch (IOException e) {

e.printStackTrace();

return false;

}finally{

try { if( output != null ) output.close(); } catch (IOException e) {}

}

}

/**

* 根据自定义内容生成文件

* @param data              自定义内容

* @param filePath          输出目录

* @return

*/

public boolean render(String data, StringBuilder filePath)  {

BufferedWriter output = null;

try {

File file = new File(filePath.toString());

File path = new File(file.getParent());

if ( ! path.exists() ) {

path.mkdirs();

}

output = new BufferedWriter(new FileWriter(file));

output.write(data);

return true;

} catch (IOException e) {

e.printStackTrace();

return false;

}finally{

try { if( output != null ) output.close(); } catch (IOException e) {}

}

}

}

2~ 业务开跑package com.momathink.tpp;

import java.util.List;

import javax.sql.DataSource;

import com.demo.common.model._JFinalDemoGenerator;

import com.jfinal.kit.Kv;

import com.jfinal.kit.PathKit;

import com.jfinal.plugin.activerecord.dialect.MysqlDialect;

import com.jfinal.plugin.activerecord.generator.DataDictionaryGenerator;

import com.jfinal.plugin.activerecord.generator.MetaBuilder;

import com.jfinal.plugin.activerecord.generator.TableMeta;

/**

* 代码生成器

* @author dufuzhong

*/

public class JfGenerator {

public static final JfGenerator me  = new JfGenerator();

protected final JfEnjoy jfEngine    = new JfEnjoy();

protected Kv tablemetaMap       = null;

protected String packageBase    = "com.momathink";

protected String srcFolder      = "src";

protected String viewFolder     = "_view";

protected String basePath       = "";

public JfGenerator setPackageBase(String packageBase){

this.packageBase = packageBase;

return this;

}

public JfGenerator setBasePath(String basePath){

this.basePath = basePath;

return this;

}

public JfGenerator setSrcFolder(String srcFolder){

this.srcFolder = srcFolder;

return this;

}

public JfGenerator setViewFolder(String viewFolder){

this.viewFolder = viewFolder;

return this;

}

protected class DataGenerator extends DataDictionaryGenerator {

public DataGenerator(DataSource dataSource, String dataDictionaryOutputDir) {

super(dataSource, dataDictionaryOutputDir);

}

public void rebuildColumnMetas(List tableMetas) {

super.rebuildColumnMetas(tableMetas);

}

};

public TableMeta getTableMeta(String tableName){

if( tablemetaMap == null ){

DataSource dataSource = _JFinalDemoGenerator.getDataSource();

MetaBuilder metaBuilder = new MetaBuilder(dataSource);

metaBuilder.setDialect(new MysqlDialect());

//metaBuilder.addExcludedTable(_JFinalDemoGenerator.excludedTable);

List tableMetas = metaBuilder.build();

new DataGenerator(dataSource, null).rebuildColumnMetas(tableMetas);

if (tableMetas.size() == 0) {

System.out.println("TableMeta 数量为 0,不生成任何文件");

return null;

}

Kv kv = Kv.create();

for (TableMeta tableMeta : tableMetas) {

kv.set(tableMeta.name, tableMeta);

}

tablemetaMap = kv;

}

return (TableMeta) tablemetaMap.get(tableName);

}

/**

* 生成手脚架代码

*/

public JfGenerator allRender(String className, String tableName) {

return javaRender(className, tableName).htmlRender(className, tableName);

}

/**

* java 代码生成

* */

public JfGenerator javaRender(String className, String tableName) {

//刷新 映射对象

_JFinalDemoGenerator.main(null);

controller(className);

validator(className);

service(className , tableName);

return this;

}

private String toClassNameSmall(String className) {

return new StringBuffer(className.substring(0, 1).toLowerCase()).append(className.substring(1)).toString();

}

private String toPackages(String className) {

return new StringBuffer(packageBase).append(".").append(basePath)

.append(".").append(className.toLowerCase()).toString();

}

/**

* 生成Controller

* @param className         类名称

*/

public void controller(String className){

String packages = toPackages(className);

String classNameSmall = toClassNameSmall(className);

jfEngine.render("/java/controller.html",

Kv.by("package", packages)

.set("className", className)

.set("classNameSmall", classNameSmall)

.set("basePath", basePath )

,

new StringBuilder()

.append(System.getProperty("user.dir"))

.append("/")

.append(srcFolder)

.append("/")

.append(packages.replace(".", "/"))

.append("/")

.append(className)

.append("Controller.java")

);

}

/**

* 生成validator

* @param className         类名称

*/

public void validator(String className){

String packages = toPackages(className);

String classNameSmall = toClassNameSmall(className);

jfEngine.render("/java/validator.html",

Kv.by("package", packages)

.set("className", className)

.set("classNameSmall", classNameSmall)

,

new StringBuilder()

.append(System.getProperty("user.dir"))

.append("/")

.append(srcFolder)

.append("/")

.append(packages.replace(".", "/"))

.append("/")

.append(className)

.append("Validator.java")

);

}

/**

* 生成Service

* @param className         类名称

* @param tableName         表名

*/

public void service(String className, String tableName){

String packages = toPackages(className);

String classNameSmall = toClassNameSmall(className);

jfEngine.render("/java/service.html",

Kv.by("package", packages)

.set("className", className)

.set("classNameSmall", classNameSmall)

.set("tableName", tableName)

,

new StringBuilder()

.append(System.getProperty("user.dir"))

.append("/")

.append(srcFolder)

.append("/")

.append(packages.replace(".", "/"))

.append("/")

.append(className)

.append("Service.java")

);

}

/**

* @param className

* @param tableName

* */

public JfGenerator htmlRender(String className, String tableName){

TableMeta tablemeta = getTableMeta(tableName);

htmlList(className, tablemeta);

return this;

}

//页面的生成一般定制比较多..就来个简单的吧

public void htmlList(String className, TableMeta tablemeta){

String packages = toPackages(className);

String classNameSmall = toClassNameSmall(className);

String basePathUrl = basePath.replace('.', '/');

jfEngine.render("/html/list.html",

Kv.by("tablemeta", tablemeta)

.set("package", packages)

.set("className", className)

.set("classNameSmall", classNameSmall)

.set("basePath", basePathUrl )

,

new StringBuilder()

.append(PathKit.getWebRootPath())

.append("/")

.append(viewFolder)

.append("/")

.append(basePathUrl)

.append("/")

.append(classNameSmall)

.append("/")

.append(classNameSmall)

.append("List.html")

);

}

// ... 继续扩展吧~

}

3~  爽的不要不要~ 放两三个模版事例吧...  我这边的模版和业务关联的比较多了, 几乎没什么通用的了,,,, 自己业务扩展吧~

7a34fac721db51b87231d3bfc73fab93.pngpackage #(package);

import com.jfinal.aop.Before;

import com.jfinal.core.Controller;

import com.demo.common.model.#(className);

/**

* #(className) 管理

* 描述:

*

*/

public class #(className)Controller extends Controller {

//private static final Log log = Log.getLog(#(className)Controller.class);

static #(className)Service srv = #(className)Service.me;

/**

* 列表

* /#(basePath)/#(classNameSmall)/list

*/

public void list() {

setAttr("page", srv.paginate(getParaToInt("p", 1), 40));

render("#(classNameSmall)List.html");

}

/**

* 准备添加

* /#(basePath)/#(classNameSmall)/add

*/

public void add() {

render("#(classNameSmall)Add.html");

}

/**

* 保存

* /#(basePath)/#(classNameSmall)/save

*/

@Before({#(className)Validator.class})

public void save() {

srv.save(getModel(#(className).class));

renderJson("isOk", true);

}

/**

* 准备更新

* /#(basePath)/#(classNameSmall)/edit

*/

public void edit() {

#(className) #(classNameSmall) = srv.findById(getParaToInt("id"));

setAttr("#(classNameSmall)", #(classNameSmall));

render("#(classNameSmall)Edit.html");

}

/**

* 更新

* /#(basePath)/#(classNameSmall)/update

*/

@Before(#(className)Validator.class)

public void update() {

srv.update(getModel(#(className).class));

renderJson("isOk", true);

}

/**

* 查看

* /#(basePath)/#(classNameSmall)/view

*/

public void view() {

#(className) #(classNameSmall) = srv.findById(getParaToInt("id"));

setAttr("#(classNameSmall)", #(classNameSmall));

render("#(classNameSmall)View.html");

}

/**

* 删除

* /#(basePath)/#(classNameSmall)/delete

*/

public void delete() {

srv.delete(getParaToInt("id"));

renderJson("isOk", true);

}

}package #(package);

import com.jfinal.plugin.activerecord.Db;

import com.jfinal.plugin.activerecord.Page;

import com.demo.common.model.#(className);

/**

* #(className) 管理

* 描述:

*/

public class #(className)Service {

//private static final Log log = Log.getLog(#(className)Service.class);

public static final #(className)Service me = new #(className)Service();

private final #(className) dao = new #(className)().dao();

/**

* 列表-分页

*/

public Page paginate(int pageNumber, int pageSize) {

return dao.paginate(pageNumber, pageSize, "SELECT * ", "FROM #(tableName)");

}

/**

* 保存

*/

public void save(#(className) #(classNameSmall)) {

#(classNameSmall).save();

}

/**

* 更新

*/

public void update(#(className) #(classNameSmall)) {

#(classNameSmall).update();

}

/**

* 查询

*/

public #(className) findById(int #(classNameSmall)Id) {

return dao.findFirst("select * from #(tableName) where id=?", #(classNameSmall)Id);

}

/**

* 删除

*/

public void delete(int #(classNameSmall)Id) {

Db.update("delete from #(tableName) where id=?", #(classNameSmall)Id);

}

}

// 其他模版就不放了, 自己扩展吧~~

再放个页面的吧 , 比较有代表性

/tpl/html/list.html#("#")@adminLayout()

#("#")define main()

添加#(tablemeta.remarks)

#for(x : tablemeta.columnMetas)

#(x.remarks)

#end

操作

#("#")for(x : page.list)

#for(x : tablemeta.columnMetas)

#("#")(x.#(x.name))

#end

查看

更新

删除

#("#")end

#("#")@paginate(accountPage.pageNumber, accountPage.totalPage, "/#(basePath)/#(classNameSmall)/list?p=")

#("#")end

#("#")define css()

#("#")end

#("#")define js()

#("#")end

这个功能包建在外面, 再Build Path进去, 算是可插拔哦~

2b7bb882ef954c46ffe076b843dc63c0.png

码云:

https://git.oschina.net/bean80/tpp.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下代码实现FTP文件上传: ``` import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.tx.Tx; import com.jfinal.upload.UploadFile; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import java.io.IOException; import java.io.InputStream; public class FtpController extends Controller { public void upload() { UploadFile file = getFile("file"); boolean success = false; try { success = uploadToFtp(file.getFileName(), file.getFile()); } catch (IOException e) { e.printStackTrace(); } if (success) { renderText("上传成功"); } else { renderText("上传失败"); } } @Before(Tx.class) public boolean uploadToFtp(String fileName, File file) throws IOException { FTPClient ftp = new FTPClient(); ftp.connect("ftp.example.com", 21); ftp.login("username", "password"); int reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return false; } ftp.setFileType(FTP.BINARY_FILE_TYPE); ftp.enterLocalPassiveMode(); InputStream input = new FileInputStream(file); boolean success = ftp.storeFile(fileName, input); input.close(); ftp.logout(); ftp.disconnect(); if (success) { Record record = new Record().set("file_name", fileName); Db.save("file", record); } return success; } } ``` 这段代码使用jfinal 框架和 Apache Commons Net 库来实现 FTP 文件上传。在 uploadToFtp 方法中,我们连接到 FTP 服务器,设置文件类型为二进制,使用被动模式,然后将文件上传到服务器。如果上传成功,我们将文件名保存到数据库中。在 upload 方法中,我们使用 getFile 方法获取上传的文件,然后调用 uploadToFtp 方法将文件上传到 FTP 服务器。最后,我们根据上传结果返回相应的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值