我通过 Service Builder 创建了一个 portlet,它存储了一些用户数据以及日期。
我的service.xml文件的相关部分
<entity name="ServiceAgreement" local-service="true" remote-service="false">
<column name="agreementId" type="long" primary="true"></column>
<column name="agreementVersion" type="double"></column>
<column name="userId" type="long"></column>
<column name="agreementTimestamp" type="Date"></column><!-- column w/ the trouble -->
<column name="groupId" type="long"></column>
<column name="companyId" type="long"></column>
<order by="asc">
<order-column name="agreementTimestamp"></order-column>
</order>
<finder name="G_AT" return-type="Collection">
<finder-column name="groupId"></finder-column>
<finder-column name="agreementTimestamp"></finder-column>
</finder>
<finder name="SignedDate" return-type="Collection">
<finder-column name="agreementTimestamp"></finder-column>
</finder>
...
我目前正在编写另一个 portlet,它将成为存储在第一个 portlet 中的数据的报告 portlet。
我遇到的问题是,当我使用标签按日期执行搜索时,我没有从数据库中得到我知道的日期的任何响应。我已经将问题追溯到 ServiceBuilder 构建的“findbysignedDate”方法,按日期搜索,精确到毫秒!
我要检索的记录: 例如,我的报告 portlet 包含:
int month = Integer.parseInt(request.getParameter("dateMonth"));
int day = Integer.parseInt(request.getParameter("dateDay"));
int year = Integer.parseInt(request.getParameter("dateYear"));
GregorianCalendar cal = new GregorianCalendar();
cal.clear();
cal.set(year, month, day);
Date signedDate = cal.getTime();
try {
if(signedDate == null || signedDate.getTime() < 0) {
throw new PortalException("Invalid date input provided.");
} else {
_log.debug("Signed Date: " + signedDate.toString());
//get TOS data
JSONArray tosArray = LiferayHelper.getTOSsBySignedDate(signedDate);
...
'tosArray' 中没有返回任何内容。但是,如果我这样写:
int month = Integer.parseInt(request.getParameter("dateMonth"));
int day = Integer.parseInt(request.getParameter("dateDay"));
int year = Integer.parseInt(request.getParameter("dateYear"));
GregorianCalendar cal = new GregorianCalendar();
cal.clear();
cal.set(year, month, day,18,49,15); //getting REALLY specific here...
cal.add(Calendar.MILLISECOND, 958);
Date signedDate = cal.getTime();
try {
if(signedDate == null || signedDate.getTime() < 0) {
throw new PortalException("Invalid date input provided.");
} else {
_log.debug("Signed Date: " + signedDate.toString());
//get TOS data
JSONArray tosArray = LiferayHelper.getTOSsBySignedDate(signedDate);
...
然后 tosArray 包含正确的数据。
我只想拉回一天(24 小时)的所有数据。有谁知道是否有解决此问题的内置方法?还是我需要重写我的 service.xml 文件?我是否不得不编写自己的搜索方法?
谢谢。