MAGNOLIA CMS - 使用cmsu时:simpleSearch和cmsu:searchResultSnippet链接显示不正确,无法将日期转换为可读格式

时间:2011-09-15 14:36:46

标签: jsp magnolia

使用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>

因此,假设我有一个与搜索模式匹配的页面,如果这只是文本,它将正确显示该代码段。但是,如果匹配模式的文本是链接,它将显示不再链接的片段,例如“”。

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


此外,使用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中[时间= 1307354223649,areFieldsSet =真,areAllFieldsSet =真,宽大=假,区= sun.util.calendar.ZoneInfo [ID = “GMT + 01:00”,偏移量= 360万,dstSavings = 0, useDaylight =假,过渡= 0,lastRule =空],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,微差= 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,任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

SearchResultSnippet故意为HTML提供HTML,因为它不希望让您处于显示&lt; a&gt;的位置。标记在前120个字符中而不显示&lt; / a&gt;标签(可能是也可能不是前120个字符)。为了让你按照自己喜欢的方式工作,你需要重写那个类,跟踪在前120个字符中打开的所有标签,这样你就可以确保输出相应的关闭标签了。

对于日期问题,根据维基上的this page,看起来您应该可以使用&lt; cms:out&gt;像这样的标签:

&lt; cms:out nodeDataName =“mgnl:creationdate”contentNodeName =“MetaData”/&gt;