Pagerが完成しました。
ポイントは以下の通りです。
viewYearに、ページのview_year=以下の値を入れるために、ALEipUtilsクラスを使用したこと。
ExpressionFactoryでlikeExpメソッドを使わず、greaterOrEqualExpメソッドとlessOrEqualExpメソッドを使って範囲指定したこと。(HOLIDAY_DATEがDATE型であったためLIKEが機能しないのと、処理の速さを考慮したため)
orderAscendingメソッドを使って、昇順にソートして見栄えを良くした。
Iitializeメソッド
/** 個別の休日の日付 */ private ALDateField holiday_date; /** 現在のページの年 */ private ALDateTimeField viewYear; /** 前の年 */ private ALDateTimeField prevYear; /** 次の年 */ private ALDateTimeField nextYear; @Override public void init(ALAction action, RunData rundata, Context context) throws ALPageNotFoundException { Calendar cal = Calendar.getInstance(); // 前の年 次の年 prevYear = new ALDateTimeField("yyyy"); nextYear = new ALDateTimeField("yyyy"); holiday_date = new ALDateField(); holiday_date.setValue(cal.getTime()); // 現在のページの年 viewYear = new ALDateTimeField("yyyy"); viewYear.setNotNull(true); if (ALEipUtils.isMatch(rundata, context)) { if (rundata.getParameters().containsKey("view_year")) { ALEipUtils.setTemp(rundata, context, "view_year", rundata .getParameters() .getString("view_year")); } } String tmpViewYear = ALEipUtils.getTemp(rundata, context, "view_year"); if (tmpViewYear == null || tmpViewYear.equals("")) { viewYear.setValue(cal.getTime()); } else { viewYear.setValue(tmpViewYear); if (!viewYear.validate(new ArrayList<String>())) { ALEipUtils.removeTemp(rundata, context, "view_year"); throw new ALPageNotFoundException(); } } // 前の年 次の年 prevYear = new ALDateTimeField("yyyy"); nextYear = new ALDateTimeField("yyyy"); Calendar cal1 = Calendar.getInstance(); cal1.setTime(viewYear.getValue()); cal1.add(Calendar.YEAR, 1); nextYear.setValue(cal1.getTime()); cal1.add(Calendar.YEAR, -2); prevYear.setValue(cal1.getTime()); }
getSelectQueryメソッド
/** * 検索条件を設定した SelectQuery を返します。 <BR> * * @param rundata * @param context * @return */ private SelectQuery<EipMHoliday> getSelectQuery(RunData rundata, Context context) { SelectQuery<EipMHoliday> query = Database.query(EipMHoliday.class); Expression exp1 = ExpressionFactory.greaterOrEqualExp( EipMHoliday.HOLIDAY_DATE_PROPERTY, viewYear.getYear() + "-01-01"); query.setQualifier(exp1); Expression exp2 = ExpressionFactory.lessOrEqualExp( EipMHoliday.HOLIDAY_DATE_PROPERTY, viewYear.getYear() + "-12-31"); query.andQualifier(exp2); return buildSelectQueryForFilter(query, rundata, context); }
selectListメソッド
/** * 一覧データを取得します。 <BR> * * @param rundata * @param context * @return * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected ResultList<EipMHoliday> selectList(RunData rundata, Context context) throws ALPageNotFoundException, ALDBErrorException { try { SelectQuery<EipMHoliday> query = getSelectQuery(rundata, context); buildSelectQueryForListView(query); query.orderAscending(EipMHoliday.HOLIDAY_DATE_PROPERTY); return query.getResultList(); } catch (Exception ex) { logger.error("system", ex); return null; } }