JSTL过滤内容基于fn:contains

时间:2013-12-20 17:35:44

标签: java xml jsp jstl

我有一个XML文件,其中包含我的数据库数据,可输出网页所需的内容

目前我正在使用JSTL

在页面中实现博客文章

我的XML输出是:

<articles>
  <article author="Some Author" group="City Name" id="1" title="Article Title">
    <tags>
    Accessories, Articles, Beauty, Bridal Wear, Fashion, bouquets, gowns, hair styles, make-up, make-up tips, Photography, venue,
    </tags>
    <content>
      <![CDATA[Article Content HTML]]>
    </content>
  </article>
</articles>

我需要根据特定标签过滤文章。 我已经尝试过以这种方式使用循环:

<x:forEach select="$doc/WGBE/region/articles/article" var="filteredArticle">
  <x:if select="$filteredArticle/tags ='First Steps'">
    <li><x:out select="$filteredArticle/@title"/></li>
  </x:if>
</x:forEach>

但由于tags标签包含长刺,因此除非我始终知道完整的字符串,否则此情况会失败。

所以我尝试实现以下循环:

<x:forEach select="$doc/WGBE/region/articles/article" var="filteredArticle">
  <c:set var="firstSteps" value="$filteredArticle/tags"/>
  <c:if test="${fn:contains(firstSteps,'First Steps')}">
    <li><x:out select="$filteredArticle/@title"/></li>
  </c:if>
</x:forEach>

这会引发异常:

330: tag = 'if' / attribute = 'test': An error occurred while parsing custom action attribute "test" with value "${fn:contains(firstSteps,'First Steps')}": org.apache.taglibs.standard.lang.jstl.parser.ParseException: EL functions are not supported.

我从这里拿了示例代码: http://www.tutorialspoint.com/jsp/jstl_function_contains.htm

我对JSTL语法不太熟悉,有人请指出我正确的方向。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

根据您发布的taglib指令,您将引用旧版本的JSTL规范。

变化:

<%@ taglib prefix="c" uri="java.sun.com/jstl/core"; %> 

要:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

另外,请确保web.xml的顶部引用正确的servlet规范。对于2.5,它应该是:

<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

最后,从每个剩余的taglib指令中删除分号;

尝试进行这些更改,然后查看原始问题是否仍然存在。