1

使用 cmsu:simpleSearch 和 cmsu:searchResultSnippet 链接无法正确显示。

这是我的代码:

<c:if test="${!empty param.contentSearchPattern}">
    <h1>xx results for "${fn:escapeXml(param.contentSearchPattern)}"</h1>
    <ol>
        <cmsu:simpleSearch query="${param.contentSearchPattern}" var="results" startLevel="1" />
        <c:if test="${empty results}">
            <p>No results</p>
        </c:if>
        <c:forEach var="node" items="${results}">
            <li>
                <h2><a href="${pageContext.request.contextPath}${node.handle}.html">${node.title}</a></h2>
                <p class="pageResultUrl">drintranet-testdev${node.handle}.html</p>
                <p><cmsu:searchResultSnippet query="${param.contentSearchPattern}" page="${node}" chars="120"/></p>
            </li>
        </c:forEach>
    </ol>
</c:if>

所以假设我有一个匹配搜索模式的页面,如果这只是文本,它将正确显示片段。但是,如果匹配模式的文本是一个链接,它将显示诸如“”之类的片段,而不再被链接。

我希望能够保持相同的格式。IE。如果文本也是链接,则显示带有链接的文本。


此外,当使用 cmsu:simpleSearch 和 cmsu:searchResultSnippet 时,我想显示页面/文章的创建日期。

这是代码:

<c:if test="${!empty param.contentSearchPattern}">
    <h1>xx results for "${fn:escapeXml(param.contentSearchPattern)}"</h1>
    <ol>
        <cmsu:simpleSearch query="${param.contentSearchPattern}" var="results" startLevel="1" />
        <c:if test="${empty results}">
            <p>No results</p>
        </c:if>
        <c:forEach var="node" items="${results}">
            <li>
                <h2><a href="${pageContext.request.contextPath}${node.handle}.html">${node.title}</a></h2>
                <p class="pageResultUrl">drintranet-testdev${node.handle}.html</p>
                <p><cmsu:searchResultSnippet query="${fn:escapeXml(param.contentSearchPattern)}" page="${node}" chars="120"/></p>
                <p>Creation Date: ${node.metaData.creationDate}</p>
            </li>
        </c:forEach>
    </ol>
</c:if>

但它返回创建日期行:

创建日期:java.util.GregorianCalendar[time=1307354223649,areFieldsSet=true,areAllFieldsSet=true,lenient=false,zone=sun.util.calendar.ZoneInfo[id="GMT+01:00",offset=3600000,dstSavings =0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2011,MONTH=5,WEEK_OF_YEAR=23,WEEK_OF_MONTH=2,DAY_OF_MONTH=6,DAY_OF_YEAR= 157,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=57,SECOND=3,MILLISECOND=649,ZONE_OFFSET=3600000,DST_OFFSET=0]

我正在尝试使用这种类型的代码将此日期转换为人类可读的格式:

  <cms:ifNotEmpty nodeDataName="date">
    <cms:out nodeDataName="date" datePattern="MM/dd/yyyy hh:mm a" var="eventDate"/>
  </cms:ifNotEmpty>

但这不起作用,因为 pageDate 不是我假设的 nodeDataName ,知道如何做到这一点吗?

4

2 回答 2

1

试试<p>Creation Date: ${node.metaData.creationDate.time}</p>吧,但我不知道这是否可行。node.metaData.creationDate是 java.util.Calendar 类型,而不是java.util.Date. 首先进行从日历到日期的转换。

于 2013-01-29T12:39:57.970 回答
0

SearchResultSnippetTag 故意使 HTML 中性化,因为它不想让您处于显示前 120 个字符中的 <a> 标记而不显示 </a> 标记(可能在也可能不在前 120 个字符)。为了让它以您想要的方式工作,您需要重写该类,跟踪在前 120 个字符中打开的所有标签,以便您可以确保相应的关闭标签也得到输出.

对于日期问题,根据wiki 上的此页面,您应该能够像这样使用 <cms:out> 标记:

<cms:out nodeDataName="mgnl:creationdate" contentNodeName="MetaData" />

于 2011-09-16T13:18:36.503 回答