0

ユーザーが入力した日付 (liferay 日付ピッカー) を取得し、その日付に基づいてコンテンツを jsp に表示する必要があります。デフォルトでは、ページが読み込まれると日付が現在の日付になるため、現在の日付のデータが表示されます。

カスタム クエリを使用して、次のように jsp で呼び出しを行っています。

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

curdateは、データを表示する日付です。

私が持っているカスタムクエリでは:

 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 を取得するにはどうすればよいですか? Attention.attDate LIKEと書いたときのクエリは正しいですか? 私のjspには、フォーム内にある日付ピッカーがあります。この日付は、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;

    }

}

4

1 に答える 1

0

「currdate」とattendation.attDateの両方がjava.util.Date型であると仮定します。この場合、問題は日付をSQL 'LIKE'ステートメントと比較することから始まると思います。これは実際には文字列比較で使用することを意図しています。

new Date()日付を操作する場合は、'>' と '<' を使用する必要があります。2 つの日付記号を正確に一致させることは事実上不可能であるためです。ミリ秒レベルの精度で、日付ピッカーから取得した日付は 02-12-2013 00:00:00 のようになります

于 2013-05-26T20:45:05.043 に答える