freemarker标签调用方法

来源:互联网 发布:重复文件查找 知乎 编辑:程序博客网 时间:2024/05/17 03:56

 ftl页面

    <@credit.activity  noActivityId=[(vo.activity.id)!] limit=[7] ;e,status>
                      <#if tdqyhnum=1>
                        <dt><a href="${e.url!''}"><img src="${resourceDomain}${e.shortImage!''}" alt=""></a><span><a href="${e.url!''}">${e.title!''}</a></span>${e.description!''}</dt>
                      <#else>
                        <dd><span><#if e.expireTime??>${e.expireTime?string("yyyy-MM-dd")}<#else>长期有效</#if></span><a href="${e.url!''}" title="">${e.title!''}</a></dd>
                      </#if>
                      <#assign tdqyhnum=tdqyhnum+1>
        </@credit.activity>


  <@credit.activity  noActivityId=[(vo.activity.id)!] limit=[7] ;e,status>表明 调用credit标签中的activity方法 传递的参数是noActivityId


于是找到了

<#include 'common.ftl'>
<#-- 信用卡 -->
<#macro credit
    creditId=[]        <#--信用卡Id。列出指定信用卡[888, 889, 901]的文档-->
    noCreditId=[]
    flag=[]             <#--自定义属性。头条:h 推荐:c 幻灯:f 特荐:a 滚动:s 加粗: b 图片: p 跳转: j。默认列出全部。例如:列出 头条和幻灯 ['h', 'c']-->
    noFlag=[]             <#--自定义属性。不包含集合中的属性。-->
    tagId=[]             <#--指定Tag的文档。例如:指定一个或多个tag的文档。例如:列出[1, 3]的文档-->
    keyword=[]             <#--指定包含在集合中的关键字的文档。['广发', '金卡']-->
    orderBy='id desc'     <#--排序方式-->
    random=false
    limit=[]             <#--行数 [0, 10]或[10]都是从列出前10条数据-->
    screeningId=[]
    bankId=[]
    isApply=2
    regionId=[]
    activityId=[]
>
    <#local page=taglib.ftlCreditCreditcardService.findPage(creditId,noCreditId,flag,noFlag,tagId,keyword,orderBy,random,limit,screeningId,bankId,isApply,regionId,activityId)>
    <#if pagination?? && pagination>
        ${(inner.pageStatus.setPageSize(pageSize))!}
        ${(inner.pageStatus.setPageCount(page.totalPages))!}
        ${(inner.pageStatus.setPage(page))!}
    </#if>
    <#list page.result as e>
        <#nested e, iteratorStatus(e_index, page.result?size)><#t>
    </#list>
</#macro>

<#-- 优惠活动 -->
<#macro activity     
    activityId=[]        <#--信用卡Id。列出指定信用卡[888, 889, 901]的文档-->
    noActivityId=[]
    flag=[]             <#--自定义属性。头条:h 推荐:c 幻灯:f 特荐:a 滚动:s 加粗: b 图片: p 跳转: j。默认列出全部。例如:列出 头条和幻灯 ['h', 'c']-->
    noFlag=[]
    tagId=[]             <#--自定义属性。不包含集合中的属性。-->
    keyword=[]             <#--指定包含在集合中的关键字的文档。['广发', '金卡']-->
    orderBy='id desc'     <#--排序方式-->
    random=false
    limit=[]             <#--行数 [0, 10]或[10]都是从列出前10条数据-->
    brandId=[]         <#--商户id-->
    bankId=[]           <#--银行id-->
    screeningId=[]         <#--塞选条件id-->
    regionId=[]            <#--城市id-->
    creditCardId=[]
    isSelf=2
>
    <#local page=taglib.ftlCreditActivityService.findPage(activityId,noActivityId,flag,noFlag,tagId,keyword,orderBy,random,limit,brandId,bankId,screeningId,regionId,creditCardId,isSelf)>
        <#if pagination?? && pagination>
        ${(inner.pageStatus.setPageSize(pageSize))!}
        ${(inner.pageStatus.setPageCount(page.totalPages))!}
        ${(inner.pageStatus.setPage(page))!}
    </#if>
    <#list page.result as e>
        <#nested e, iteratorStatus(e_index, page.result?size)><#t>
    </#list>
</#macro>


标签调用controller中的findpage方法 于是去找 ftlCreditActivityService



于是找到了

@Service
public class FtlCreditActivityService implements FtlService {

    private static final Logger LOG = LoggerFactory.getLogger(FtlCreditActivityService.class);
    @Autowired
    CreditActivityApiService creditActivityApiService;

    public Page<CreditActivityRestResult> findPage(List<Number> activityId, List<Number> noActivityId,
            List<String> flag, List<String> noFlag, List<Number> tagId, List<String> keyword, String orderBy,
            Boolean random, List<Number> limit, List<Number> storeId, List<Number> bankId, List<Number> screeningId,
            List<Number> regionId, List<Number> creditcardId, Long isSelf) throws Exception {
        CreditActivityParam creditActivityParam = new CreditActivityParam(activityId, noActivityId, flag, noFlag,
                tagId, keyword, orderBy, random, limit, storeId, bankId, screeningId, regionId, creditcardId, isSelf);
        @SuppressWarnings("unchecked")
        List<CreditActivityRestResult> list = (List<CreditActivityRestResult>) creditActivityApiService.findList(
                creditActivityParam).getDefaultModel();
        Page<CreditActivityRestResult> page = new Page<CreditActivityRestResult>();
        page.setResult(list);
        return page;
    }

}

用CreditActivityRestResult 来封装各类参数


调用findList

--solr部分

@Service
public class CreditActivityApiService {
    @Autowired
    HttpSolrServer httpSolrServer;
    @Autowired
    ActivityDao activityDao;

    public Result findList(CreditActivityParam creditActivityParam) {
        // 存在ID的情况,只看ID 的值,忽略其他
        Result result = CreditApiResult.getInstance();
        List<CreditActivityRestResult> activitysort = null;
        if (creditActivityParam.getActivityId() != null && !creditActivityParam.getActivityId().isEmpty()) {
            activitysort = findByDb(creditActivityParam.getActivityId());
        } else {
            try {
                activitysort = findBySolr(creditActivityParam);
            } catch (SolrServerException e) {
                return new CreditApiResult(false);
            }
        }
        result.setDefaultModel(activitysort);
        result.setResultCode(new ResultCode(ErrorCode.SUCCESS));
        return result;
    }

    private List<CreditActivityRestResult> findByDb(List<Number> activityId) {
        List<CreditActivityRestResult> list = new CreditActivityRestResult().getRestResults(activityDao
                .findByIds(activityId));
        // 重新排序
        return sortById(activityId, list);
    }

    private List<CreditActivityRestResult> findBySolr(CreditActivityParam creditActivityParam)
            throws SolrServerException {
        SolrQuery solrQuery = getSolrQuery(creditActivityParam);
        QueryResponse res = httpSolrServer.query(solrQuery);
        List<Number> ids = getIdsFromRes(res);
        if (ids == null || ids.isEmpty()) {
            return new ArrayList<CreditActivityRestResult>();
        }
        List<CreditActivityRestResult> creditActivityRestResults = new CreditActivityRestResult()
                .getRestResults(activityDao.findByIds(getIdsFromRes(res)));
        return sortById(ids, creditActivityRestResults);
    }

    private List<CreditActivityRestResult> sortById(List<Number> ids, List<CreditActivityRestResult> creditActivitys) {
        List<CreditActivityRestResult> activitysort = new ArrayList<CreditActivityRestResult>();
        for (Number id : ids) {
            for (CreditActivityRestResult creditActivityRestResult : creditActivitys) {
                if (creditActivityRestResult.getId().equals(id)) {
                    activitysort.add(creditActivityRestResult);
                }
            }
        }
        return activitysort;
    }

    private List<Number> getIdsFromRes(QueryResponse res) {
        List<Number> ids = new ArrayList<Number>();
        SolrDocumentList docs = res.getResults();
        for (SolrDocument solrDocument : docs) {
            ids.add((Number) solrDocument.get("id"));
        }
        return ids;
    }

    private SolrQuery getSolrQuery(CreditActivityParam creditActivityParam) {
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery("*:*");
        solrQuery.addFilterQuery("+modelType:" + AppConstant.CREDIT_CONSTANT + "_"
                + AppConstant.CREDIT_ACTIVITY_CONSTANT);

        SolrUtil.addStringToQuery(solrQuery,
                SolrUtil.buildListLike(creditActivityParam.getKeyword(), "queryFields", "+"));

        SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getActivityId(), "id", "+"));
        SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getNoActivityId(), "id", "-"));
        SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getTagId(), "tagId", "+"));
        SolrUtil.addStringToFilterQuery(solrQuery,
                SolrUtil.buildList(creditActivityParam.getRegionId(), "regionId", "+"));
        SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getFlag(), "flag", "+"));
        SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getNoFlag(), "flag", "-"));
        SolrUtil.addStringToFilterQuery(solrQuery,
                SolrUtil.buildList(creditActivityParam.getScreeningId(), "screening", "+"));
        SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getBankId(), "bankId", "+"));
        SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.buildList(creditActivityParam.getBrandId(), "brandId", "+"));
        SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.build(0L, "expired", "+"));

        if (Flag.TRUE.getValue().equals(creditActivityParam.getIsSelf())) {
            SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.build(Flag.TRUE.getValue(), "isSelf", "+"));
        } else if (Flag.FALSE.getValue().equals(creditActivityParam.getIsSelf())) {
            SolrUtil.addStringToFilterQuery(solrQuery, SolrUtil.build(Flag.FALSE.getValue(), "isSelf", "+"));
        }
        SolrUtil.addStringToFilterQuery(solrQuery,
                SolrUtil.buildList(creditActivityParam.getCreditcardId(), "creditcardId", "+"));
        SolrUtil.processLimit(solrQuery, creditActivityParam.getLimit());
        SolrUtil.processRandomSort(solrQuery, creditActivityParam.getRandom());
        SolrUtil.processOrderByQueryString(solrQuery, creditActivityParam.getOrderBy(), "id");
        solrQuery.setFields("id");
        return solrQuery;
    }
}

其中

1 0
原创粉丝点击