传递值并在Liferay自定义查询中使用它

时间:2013-05-25 09:52:40

标签: mysql liferay liferay-6 liferay-ide

我必须选择用户输入的日期(liferay日期选择器)并在jsp上显示基于该日期的内容。默认情况下,当页面加载时,日期将是当前日期,因此应显示当前日期的数据。

我正在使用自定义查询并在jsp中进行调用,如下所示:

 List<Object[]> ObjdisplayAttListName = AttendanceLocalServiceUtil.findAttendance(currdate);

currdate 是应显示其数据的日期

在自定义查询中我有:

 select stud.studName , stud.empTitle, attendance.attRemarks, attendance.attStatus , stud.fileEntryI from student stud left outer join attendance attendance on stud.studId = attendance.studId and attendance.attDate LIKE ? order by studName asc;

我总是得到一个空指针异常。 我如何获得NPE?当我写出勤时,我的查询是否正确。喜欢?  在我的jsp中,我有一个在表单内的datepicker。此日期还用于通过在java类中传递数据来处理数据。 我该如何提取此日期并将其发送到自定义查询?

这是我的FinderImpl:

 public class AttendanceFinderImpl extends BasePersistenceImpl  implements AttendanceFinder {

  public static String FIND_Attendance = "findAttendance";

@SuppressWarnings("rawtypes")
public List findAttendance(Date attendanceDate) throws SystemException {

    List attSearchList = null;
    Session session = null;
    try {
    session = openSession();
    String sql = CustomSQLUtil.get(FIND_Attendance);
    System.out.println("session : " + session);
    System.out.println("SQL QUERY CustomSQLUtil.get(findAttendance): " + CustomSQLUtil.get("findAttendance"));
    SQLQuery query = session.createSQLQuery(sql);
    System.out.println("SQLQuery : " + query);
    //query.addEntity("Attendance", AttendanceImpl.class);
    //query.addEntity("Employee", EmployeeImpl.class);
    QueryPos qPos = QueryPos.getInstance(query);
    System.out.println("I am returning the query : " + query);
    System.out.println("List size.list: "+ query.list());
    qPos.add(attendanceDate);
    System.out.println("List size: "+ query.list().size());
    return (List)query.list();
    }catch (Exception e) {
    }
    return null;

    }

}

1 个答案:

答案 0 :(得分:0)

我将假设'currdate'和attendance.attDate都是java.util.Date类型。 如果是这种情况,那么我认为你的问题始于将日期与sql'LIKE'语句进行比较,这实际上意味着与字符串比较一起使用。

如果使用日期,则应使用'&gt;'和'&lt;',因为它几乎不可能完全匹配2个日期符号,特别是如果其中一个是通过实时提交创建的(使用new Date()创建一个新实例)并且具有毫秒级别的精度,并且从日期选择器获得的日期看起来像02-12-2013 00:00:00