3
回答
升级1.9后,页面上EL读取属性随机性缺失问题

@JFinal 你好,想跟你请教个问题:

在做一个项目,是从1.8开始开发的;看到1.9的升级后,第一时间就更新了版本,但升级后,经常会出现一个查询出来的列表,就是List<Record>的结果集,返回到页面上,使用JSTL进行遍历输出的时候,有属性会报错提示字段不存在,但出错的字段是存在的,比如控制台显示如下信息:


com.jfinal.render.RenderException: org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: The class 'com.jfinal.plugin.activerecord.Record' does not have the property 'status'.
	at com.jfinal.render.JspRender.render(JspRender.java:69)
	at com.jfinal.core.ActionHandler.handle(ActionHandler.java:92)
	at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
	at org.eclipse.jetty.server.Server.handle(Server.java:365)
	at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
	at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926)
	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
	at java.lang.Thread.run(Thread.java:745)

而且我发现通常只有status这个字段会出现找不到的时候,我在处理数据库查询的返回结果集的时候,有取出该字段,去手动做代码转换中文,再将转换后的中文使用新的字段放入结果集中用于页面输出时显示中文状态信息;

还有就是通常这个问题,如果重启了服务器,问题就不出现了,而隔三差五的就会出来一样,这么不稳定的情况,肯定不行啊!


请 @JFinal 帮忙分析一下问题,是不是“status”这个字段是关键字;还是查询出来的结果集,不能进行读取某属性后,再放入新的属性,这样对结果集有进行手动操作后放回页面会出现属性缺失的情况?



举报
TerryZ
发帖于3年前 3回/380阅

以下是问题补充:

  • @TerryZ :补充一点就是,在1.8的时候没有这个问题 (3年前)
共有3个答案 最后回答: 3年前

引用来自“JFinal”的评论

到家后我看看你的代码

代码是这样的:

public void loadUserList(){
		StringBuilder sb = new StringBuilder();
		List<Object> params = new ArrayList<Object>();
		if(StringUtils.isNotEmpty(getPara("userLoginname"))){//用户登录名
			sb.append(" and login_name like ?");
			params.add("%" + getPara("userLoginname") + "%");
		}
		if(StringUtils.isNotEmpty(getPara("userName"))){//用户姓名
			sb.append(" and name like ?");
			params.add("%" + getPara("userName") + "%");
		}
		if(StringUtils.isNotEmpty(getPara("userSex"))){//用户性别
			sb.append(" and sex = ?");
			params.add(getPara("userSex"));
		}
		if(StringUtils.isNotEmpty(getPara("userStatus"))){//用户状态
			sb.append(" and status = ?");
			params.add(getPara("userStatus"));
		}
		this.getPageInfo();
		Page<Record> plist = Db.paginate(this.getPage(),this.getPageSize(), "select *","from tb_sys_user where 1=1 " + sb.toString(),params.toArray());
		
		for(Record r: plist.getList()){
			r.set("statusName", getStatusStr(r.getInt("status"),"STATUS"));
			r.set("sexName", getStatusStr(r.getInt("sex"),"SEX"));
		}
		this.setAttr("userList", plist);
		renderJsp("/jsp/manage/system/user/userMain.jsp");
	}



--- 共有 2 条评论 ---
TerryZ回复 @JFinal : 设置成NULL后,没有报任何异常,因为这个问题是随机无规律出现的,这个设置NULL的结果我得再测试一段时间,如果一两天内都不出现这个问题的话,那就说明确实是status被读取出来后丢失了!? 3年前 回复
JFinal尝试一下将 status 设置为 null 时是否抛出此异常 3年前 回复
@JFinal 我是不是应该把版本回滚到1.8,不敢冒这种不稳定情况的险啊,因为出现这个问题的时候,整个页面一片空白……那还是版本回滚好了
--- 共有 4 条评论 ---
TerryZ回复 @JFinal : 波总太流劈了 2年前 回复
JFinal回复 @袁小猴 : 升级 jfinal 到 2.2,此问题,早就不存在了 2年前 回复
袁小猴回复 @JFinal : 后来这么问题解决了吗?为什么就是我加了JspRender.setSupportActiveRecord(true);这个以后。。。还是会偶发的报错。需要重启项目。。 2年前 回复
JFinal不需要回滚,关于 EL 增强这个功能,只需要 JspRender.setSupportActiveRecord(true) 就相当于回滚到 1.8了,去群里面找下我,我看看是什么问题 3年前 回复
顶部