jfinal问题整理(转载自开源中国RunnerOSC文章 )

来源:互联网 发布:淘宝库存不足 编辑:程序博客网 时间:2024/06/06 06:36

1.【问】:Jfina如何不区分数据库列名的大小写?
我这儿随时出现 The attribute name is not exists: regdate,改成regDate就OK.怎么设置不区分大小写呢?? 


【答】: ActiveRecordPlugin ar = new ActiveRecordPlugin();
// 配置大小写不敏感
arp.setContainerFactory(new CaseInsensitiveContainerFactory(true));








2.【问】:jfinal用maven构建项目的所依赖jar的groupId和artifactId等信息
你好~ 我想问下jfinal用maven构建项目的所依赖jar的groupId和artifactId 等信息在什么地方找的到啊~


【答】:你可以把JFinal的jar添加到本地的Maven库中,具体命令如下


mvn install:install-file -DgroupId=com.jfinal -DartifactId=jfinal -Dversion=1.2 -Dpackaging=jar -Dfile=你本地jfinal的jar包的路径


然后在pom.xml中就可以按照上面定义的groupId和artifactId还有version添加<dependency>了


【jfinal答】:JFinal没有使用maven来构建,因为JFinal自身对第三方jar无依赖,弄上maven反而事更多了 :)






3.【问】:要是controller中一个方法 返回json数据的话应该加什么东东么~ 和SpringMVC的@ResponseBody这个功能相似么~ 还是要自己组拼啊 刚刚接触jfinal 请指教下...


【jfinal答】:Controller中返回Json数据主要有两种方法:一是先使用setAttr("blogList",blogList), setAttr("user", user)...将值都set好,然后调用一下 renderJson()方法。第二种方法是直接 renderJson("blogList", blogList)。第一种方法适合将多个对象转换成json并返回客户端;第二种方法适合仅转换指定的对象为josn并返回客户端。你还可以自行生成 json数据再调用 renderHtml(jsonString)来返回,或者自定义JsonRender也可以,方法多多:)




4.【问】:关于jfinal的Record字段顺序
想跟你请教个问题:现在想要根据SQL直接查询出Record给前端页面使用,想字段能够具有顺序,比如:


SELECT id,username,password from users;


希望record.getcolumNames()得到的列顺序也是按照id,username,password来的。


简单看了一下源码,在Record.columns中使用了HashMap的子类,而不是LinkedHashMap子类,所以我想现在是做不到的,请问一下是否有解决办法?


【jfinal答】:1:仿照 com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory做个 IContainerFactory实现类,例如叫:MyContainerFactory,注意将getColumnsMap()实现为返回 LinkedHashMap。


2:将这个MyContainerFactory对象在创建ActiveRecordPlugin时传入,如 arp.setContainerFactoryu(new MyContainerFactory())








5.【问】:jfinal 一个老生常谈的问题 乱码
遇到一个老生常谈的乱码问题,前台是get的方式提交请求 参数中有中文 中文也已经URLEncoder.encode编码,用jetty 能正常获取中文,用tomcat就乱码,tomcat的server.xml已经配置了URIEncoding="UTF8" 也重启了 还是乱码,这会是哪里没配置好?以前没用jfinal的时候是在web.xml里面添加一个过滤器来处理字符集 没出过这样的问题。会不会和apache有关系呢? 我的是apache+php+tomcat 请求是由apache转发给的tomcat。


【答】:找到问题了 果然是这个问题


Apache是使用AJP13模式代理到Tomcat的 所以需要把AJP13的编码也设置成 UTF8 这样就OK啦


<Connector URIEncoding="UTF8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>


<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF8"/>






6.【问】:有关jFinal的POST问题
想跟你请教个问题:在常见的CRUD操作中,如果我现在需要使用Ajax操作,应该如何结合jFinal实现。
我的代码是这样的:
前台页面:


<table class="info">
    <tr>
        <th>编号</th>
        <th>学号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
        <th>身份证号</th>
        <th>操作</th>
    </tr>
<c:forEach items="${stuList}" var="stu">
<tr>
<td>${stu.id}</td>
<td>${stu.Cno}</td>
<td>${stu.Name}</td>
<td>${stu.Age}</td>
<td>${stu.Gender}</td>
<td>${stu.Identity}</td>
<td>
   <a class="edit">修改</a>
   <a class="delete">删除</a>
</td>
</tr>
</c:forEach>
</table>


点击edit发出post操作:


$('.edit').on('click', function(){
$.post("/student/edit/", "id=" + id, function (data) {
    });
});


后台处理:
@Before(POST.class)
public void edit() {
    int idValue = http://my.oschina.net/muchuanwazi/blog/getParaToInt();  ....
}




这时候我发现无法取得id参数,也就是getParaToInt()方法返回值为null。


【答】:前端页面:
/**
 * ajax提交
 * @param param
 * @param url
 * @param returl
 */
function do_ajaxSubmit(param,url,returl){
var params = $(param).serialize();
var eurl = encodeURI(url);
$.ajax({type:"POST", url:eurl, data:params, dataType:"json", error:function () {
alert("系统错误,请稍后重试");
}, success:function (data) {
if (data.type == 1) {
//art.dialog.alert(data.msg);
returl == null ? window.location.reload() : window.location.href=http://my.oschina.net/muchuanwazi/blog/returl;
} else {
alert(data.msg);
}
}});
}


【jfinal答】:在Servler端与传统用法基本一样,只是响应数据通常是json格式,所以JFinal在Controller中一般使用renderJson(...)系列方法即可


    在Client端,就是js拿到json数据后更新一下html页面元素即可


7.【问】:jfinal的action中获取参数获取是否可以进一步优化?
考虑到多个action方法可能会用到一些共用参数,jfinal是否可以类似于struts那样能给controller中的私有属性自动赋值而不用getPara或setAttr即可直接使用这些参数?这样子就会方便很多。


【jfinal答】:Struts给私有属性自动赋值的方式,要做以下的事情:


1:在Controller 中定义属性


2:创建setter、getter方法


3:修改xml添加para拦截器


4:重启 web server 生效


    缺点有:


1:增加了代码量


2:共用参数增加了各action耦合度


3:定义在Controller中的属性大多数情况对某些action是无用的


4:依赖反射注入属性影响性能


5:框架复杂度提升


    楼主试用对比后应该能知道 JFinal 这样设计的好处 :)




8.【问】:jfinal url访问参数配置方式
想跟你请教个问题:jfinal 不能PHP一样配置参数方式吗?   http://www.oschina.net/question/ask/project/JFinal/user/201137,像这样?或者可以完全自己定义,我看代码里强调了了不能用/方式,能说下具体原因吗? 还有个问题,就是在程序目录名有空格的情况自动扫描会失败,判断目录不存在。


【jfinal答】:    JFinal 可以用 Handler 完全自定义路由规则,目前 JFinal 采用的路由规则兼顾了简单、高效、可用性方面的考虑。
    楼主提到的OSChina的这个url JFinal在不使用Handler的情况下可以换种方式实现:http://www.oschina.net/question/ask /project/JFinal-user-201137,也即 url中传送的参数 JFinal是采用减号"-"分隔的,而OSC采用正斜杠进行分隔,JFinal采用的方式让url层次变浅,更有利于SEO。
分隔符可以自定义,减号“-”是默认分隔符。即便出现冲突,至少有三种解决办法:
1:用别的字符转义,后端再转换回来
2:问号挂参
3:表单域传参




9.【问】:Jfinal批量提交sql执行查询


【jfinal答】:建议使用 Db.batch(...)系列方法,里面很多重载,可以试试其它重载方法




10.【问】:jfinal的 @paginate分页中,怎么附加其他的参数传递?
想跟你请教个问题:


<@paginate totalRow=housePage.totalRow pageSize=housePage.pageSize currentPage=housePage.pageNumber totalPage=housePage.totalPage actionUrl="/news/news_list/" />


我想在actionUrl中添加其他的参数通过分页一起传递,不过在添加参数后,页码会自动加在最后的位置,而获取页码页面又默认获取第一个参数为页码,请问一下这里该如何来做?


【jfinal答】:JFinal demo 中提供的 _paginate.html文件,其中定义的宏paginate还具有urlParas这个参数,一般可以不去使用,楼主的需求,可以这样用:
<@paginate totalRow=housePage.totalRow 
  pageSize=housePage.pageSize 
  currentPage=housePage.pageNumber 
  totalPage=housePage.totalPage 
  actionUrl="/news/news_list/" 
  urlParas="-${otherPara}" />
urlParas 也可以是问号挂参的形式,如:
urlParas="?var=${var}"




11.【问】:JFinal 如何在保存方法里取得最后insert的主键ID


【jfinal答】:User user = new User().set(...).set(...);
user.save();
Integer id = user.getInt("id");




12:【问】:Jfinal 两个Controller跳转问题 ?


【Jfinal答】:setAttr 或者 forwardAction 的时候生成urlPara, 如 forwardAction("/abc/" + value);




13:【问】:Jfinal等框架选择(性能)


【jfinal答】:JFinal 核心特点是:开发效率高、代码量少、学习成本低、开发体验好。开源四个月以来,反馈一直非常好,充分体现了开发者对以上特点的关注度。你对开发框架提出的需求 JFinal 都可以满足:


1:性能问题


    JFinal 仅对 servlet 进行了极薄封装,理论上来说性能接近纯 servlet,框架属于MVC + ORM 但整体代码仅一万多行,属于超轻量级开发框架。除此之外 JFinal 核心经过精心的优化,如路由匹配、Action缓存等。


2:功能问题


    JFinal 拥有 struts2 绝大部分核心功能,文件上传下载等这些都是极常规的功能了,不仅支持而且几乎都是一行代码搞定。权限管理做一个全局拦截器就可以轻松搞定,公司目前的权限 管理就是这么做的。Word、PDF、Excel这些貌似是前端的事了吧。


    建议楼主先试用几天时间,由于学习成本低,一般来说两个小时即可上手开发 :)




14.【问】:如何修改JFinal中默认的404和500的错误页面


【jfinal答】:在 YourJFinalConfig中的configConstant(Constants me)中进行配置:me.setError404View(...);me.setError500View(...)




15.【问】:JFinal访问路径问题
后台使用JFinal搭建,前端url怎么写访问路径?是绝对路径,还是相对路径?我有个小项目之前一直用jetty测试,今天部署到tomcat中后, 发现所有的url路径都错了,之前(jetty)的写法是/user/login,部署到tomcat中需要改为user/login,把前面的斜线去 掉,jetty调试时只需访问http://localhost:8089/ ,部署到tomcat后需要访问http://localhost:8089/JFProject 请问这个问题怎么解决?谢谢~~


【答】:路径的问题用ContextPathHandler解决。我的经验是最好写绝对路径


/**
 * Provide a context path to view if you need.
 * <br>
 * Example:<br>
 * In JFinalFilter: handlers.add(new ContextPathHandler("CONTEXT_PATH"));<br>
 * in freemarker: <img src=http://my.oschina.net/muchuanwazi/blog/"${BASE_PATH}/images/logo.png" />
 */
public class ContextPathHandler extends Handler {




16.【问】:关于JFinal自动获取页面提交参数映射到javabean的问题
前段时间给公司的小项目选web框架,发现了JFinal,感觉很不错,现在遇到一个问题,JFinal现在支不支持页面提交的参数自动映射到javabean啊?类似struts的form的概念,比较忙,也没时间翻论坛的帖子了,麻烦知道的朋友告诉我下,谢谢啊!


【答】:页面提交参数


user.name=xx 


user.age=xx


后台获取


getModel(User.class);


可以参考官方的demo




17.【问】:JFinal如何接受多个model的参数。
比如我们有一个User的model。页面只要参数名字为user.age  user.name,后台可以用getModel得到 User的model然后进行保存更新工作。


但是现在我是需要一次性添加多条数据,request参数如下


users[0].age=11


users[0].name=1


users[1].age=22


users[1].name=2


在传统的struts2中我们可以直接用一个list<user>很方便的接受此类参数。


请问在jfinal的model中能否支持类似功能?




【jfinal答】:本想在Controller 中做个 getModels(...) 方法的,后来觉得这种需求可能太少,而且代码不太好看,所以留给开发者自己了。目前 JFinal 已有的功能也可以解决这个问提。只需要在表单中生成这样的input 域: user1.name  user2.name  user3.name,然后在 Controller 中这样:


for (int i=0; i<size; i++) {
  getModel(User.class, "user" + i).save();
}
    针对于你在问答中的这类形式的参数:users[0].age  users[1].age,可以这样解决:


for (int i=0; i<size; i++) {
  getModel(User.class, "user[" + i + "]").save();
}
   可以走得更远,在 YourController 方法中实现:


public List<Model> getModels(Class<? extends Model> modelClass) {
  // TODO
}
     有时间我会考虑在新版本中加入这个特性,如果哪位童鞋先实现了这个方法,可以发给我先看看 :)






18.【问】:Jfinal 如何在Interceptor获取session
如何在拦截器 Interceptor获取 session来拦截用户未登录


【jfinal答】:权限用拦截器来做最合适了,一般代码形式如下:


public class AuthInterceptor implements Interceptor {
  public void intercept(ActionInvocation ai) {
    Controller controller = ai.getController();
    User loginUser = controller.getSessionAttr("loginUser");
    if (loginUser != null && loginUser.canVisit(ai.getActionKey()))
      ai.invoke();
    else
      controller.redirect("/login.html");
}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信图片打印不清楚怎么办 淘宝上传商品视频不清楚怎么办 手机安装器没了怎么办 我不做直播换工作怎么办 天猫发票被投诉怎么办 天猫机顶盒闪退怎么办 苹果8红色掉漆怎么办 毛坯房验房房及厅试水时漏水怎么办 淘宝退货赠品被拆了怎么办 如果淘宝买家说赠品不好怎么办 淘宝顾客反应没赠品怎么办 淘宝上买东西赠品不给怎么办 天猫店关了质量有问题怎么办 蘑菇街开店被骗了怎么办 百视通网络机顶盒恢复出厂后怎么办 王牌电视出现无信号怎么办 联通电视串台了怎么办 电视上出现系统更新怎么办 电视开机一直在更新怎么办 云视听极光闪退怎么办 不小心打错电话怎么办 相亲发信息不回怎么办 如果一个人微信不回电话不接怎么办 跟老公吵架打电话不接怎么办 起诉离婚对方不接电话怎么办 苹果手机接电话声音小怎么办 老公不回你微信怎么办 工地欠货款不给怎么办 朋友微信借钱不还怎么办 微信上借钱不还怎么办 微信借钱不还怎么办 微信转账借钱不还怎么办 没欠条人家欠钱不给怎么办 欠货款被告没去怎么办 别人欠我钱不接电话怎么办 借给别人钱不接电话怎么办 欠钱的人玩消失怎么办 被婚介所骗了5万怎么办 贷款紧急联系人被骚扰怎么办 微信限制加好友怎么办 珍爱网的客服老打电话怎么办