2015-12-10 2 views
0

У меня есть строка html-кода с некоторыми дополнительными тегами внутри. Мне нужно избавиться от дополнительных тегов, но не могу использовать fn: escapeXML, потому что это сделает строку более не пригодной для использования в качестве html.с использованием fn: заменить и экранировать специальные символы в jstl

Пример: Значение «NewLink» установлен как:

<a href="This is a <span class="help">test</span>">This is a <span class="help">test</span></a>

Как я могу использовать сноска: заменить (или какой-либо другой JSTL кодирование), чтобы избавиться от внутренних тегов?

Это то, чем я до сих пор справлялся. К сожалению, последнее не похоже на пустые теги.

<c:set var="displayValue">${fn:replace(pnxItem, 'span class=\"searchword\"', '')}</c:set> <c:set var="displayValue">${fn:replace(displayValue, '/span', '')}</c:set> <c:set var="displayValue">${fn:replace(displayValue, '&gt;<', '')}</c:set> <c:set var="displayValue">${fn:replace(displayValue, '<>', '')}</c:set>

+0

Мне нелегко понять, почему 'fn: escapeXml()' не может быть использован. Я думаю, что это проще, если вы просто скажете, как именно должен выглядеть желаемый результат. – BalusC

+0

Это не значит, что его нельзя использовать; это то, что оно не соответствует значениям <>. –

+0

Вы просто хотите анализировать и убирать HTML вместо escape-кода XML? Тем не менее, это проще, если вы просто скажете, как должен выглядеть желаемый результат данного примера. – BalusC

ответ

0

Не было бы хорошо, если бы вы могли использовать regular expression? Функция замены Jstl не принимает регулярное выражение в качестве аргумента, как вы, вероятно, уже знаете, судя по используемому вами подходу.

К счастью, легко написать свои собственные функции. Я всегда отношусь к классу с именем StringFunctions, состоящим из static функций, которые будут использоваться в качестве библиотеки пользовательских функций, которая содержит, например, функцию removeTags.

package com.whatever.viewhelpers; 

public class StringFunctions { 

    public static String removeTags(String s) { 

     return s.replaceAll("\\<.*?>",""); 
    } 

    // more functions ... 
} 

Теперь включите этот класс в дескриптор библиотеки тегов.

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" version="2.0"> 

    <tlib-version>1.0</tlib-version> 
    <short-name>myfn</short-name> 
    <uri>http://www.whatever.com/taglib/trlbt</uri> 

    <function>  
     <name>removeTags</name>  
     <function-class> 
      com.whatever.viewhelpers.StringFunctions 
     </function-class>  
     <function-signature>  
      String removeTags(java.lang.String)  
     </function-signature> 
    </function> 

    <!-- more functions --> 

</taglib> 

И использование в JSP:

<%@ taglib prefix="myfn" uri="/WEB-INF/taglib/tlb.tld" %> 
.... 

${myfn:removeTags(...)} 

Я выбрал myfn в качестве префикса, но вы можете выбрать любой подходящий вам.

Не уверен, что предлагаемое регулярное выражение полностью удовлетворяет ваши потребности, но оно демонстрирует принцип пользовательских функций. Вы можете делать все, что позволяет вам Java, вы можете использовать jsoup, чтобы избавиться от тегов.

Смежные вопросы