当前位置: 代码迷 >> J2EE >> java.lang.NullPointerException 分页处置
  详细解决方案

java.lang.NullPointerException 分页处置

热度:50   发布时间:2016-04-17 23:05:06.0
java.lang.NullPointerException 分页处理

java.lang.NullPointerException
at tjut.edu.dcx.model.SystemContext.getPageSize(SystemContext.java:16)
at tjut.edu.dcx.dao.BaseDao.find(BaseDao.java:131)
at tjut.edu.dcx.dao.BaseDao.find(BaseDao.java:186)
at tjut.edu.dcx.service.UserService.findUserByDep(UserService.java:77)
at tjut.edu.dcx.test.TestDao.testfindByUser(TestDao.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)





使用的是page-taglib 

package tjut.edu.dcx.model;

import java.util.List;

public class Pager<T> {
private int pageOffset;
private int pageSize;
private List<T> datas;
private long totalRecord;

public int getPageOffset() {
return pageOffset;
}

public void setPageOffset(int pageOffset) {
this.pageOffset = pageOffset;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public List<T> getDatas() {
return datas;
}

public void setDatas(List<T> datas) {
this.datas = datas;
}

public long getTotalRecord() {
return totalRecord;
}

public void setTotalRecord(long totalRecord) {
this.totalRecord = totalRecord;
}

}




package tjut.edu.dcx.model;

public class SystemContext {
private static ThreadLocal<Integer> pageOffset = new ThreadLocal<Integer>();
private static ThreadLocal<Integer> pageSize = new ThreadLocal<Integer>();

public static int getPageOffset() {
return pageOffset.get();
}

public static void setPageOffset(int _pageOffset) {
pageOffset.set(_pageOffset);
}

public static int getPageSize() {
return pageSize.get();
}

public static void setPageSize(int _pageSize) {
pageSize.set(_pageSize);
}

public static void removePageOffset() {
pageOffset.remove();
}

public static  void removePageSize() {
pageSize.remove();
}

}



分页代码:

int pageSize = SystemContext.getPageSize();

int pageOffset = SystemContext.getPageOffset();
if(pageSize<=0) pageSize = 10;
if(pageOffset<0) pageOffset = 0;
Query q = setParameterQuery(hql, args);
q.setFirstResult(pageOffset).setMaxResults(pageSize);
String cHql = getCount(hql); //获得总数的hq语句
Query cq = setParameterQuery(cHql, args); //设置参数后的hql语句
Pager<T> pager = new Pager<T>();
pager.setPageOffset(pageOffset);
pager.setPageSize(pageSize);
List<T> datas = q.list();
pager.setDatas(datas);
long totalRecord = (Long)cq.uniqueResult();
pager.setTotalRecord(totalRecord);
return pager;

service层:

public Pager<User> findUserByDep(Integer depId) {
String hql = null;
Pager<User> pages= null;

if(depId ==null){ 
hql="from User u left join fetch u.department";
pages = userDao.find(hql);
}else {
hql = "from User u left join fetch u.department dep where dep.id=? ";
pages = userDao.find(hql, depId);
}
return pages;
}

web.xml

<filter>
<filter-name>SystemContextFilter</filter-name>
<filter-class>tjut.edu.dcx.web.SystemContextFilter</filter-class>
<init-param>
<param-name>pageSize</param-name>
<param-value>15</param-value>
</init-param>
</filter>


不知道哪里错了,一直报空指针,因为也才学不久,debug总归不上手,也请各位大侠能指点迷津,不管问题能解决与否,能给个debug的思路也行 谢谢了!
------解决思路----------------------
at tjut.edu.dcx.service.UserService.findUserByDep(UserService.java:77)  提示说的很明显呀 ,  看下你的userDao是否为null
------解决思路----------------------
debug调试,看一下哪个方法的参数或返回值是空值
------解决思路----------------------
UserService.java:77 

这一行设置断点,调一下,看看哪个对象为空
------解决思路----------------------
引用:
Quote: 引用:

at tjut.edu.dcx.service.UserService.findUserByDep(UserService.java:77)  提示说的很明显呀 ,  看下你的userDao是否为null


@Service("userService")
public class UserService implements IUserService {
   
private IUserDao userDao;
private IDepartmentDao departmentDao;


public IDepartmentDao getDepartmentDao() {
return departmentDao;
}
@Resource(name="departmentDao")
public void setDepartmentDao(IDepartmentDao departmentDao) {
this.departmentDao = departmentDao;
}
public IUserDao getUserDao() {
return userDao;
}
    @Resource
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
我也已经注入了 啊  
你虽然注入了,单也要看下是否为空?是否注入错误?如果不是为空就看别的是否有null,不要相信你 的眼睛,要相信编辑器编译的结果
------解决思路----------------------
 你可以加我的QQ号:54250807  我帮你解决。
  相关解决方案