如何从文本中删除html标签并将其存储在EL中?

时间:2016-01-06 22:40:20

标签: javascript html json atg atg-dynamo

我使用atg dsp:valueof标记获取数据,并将'valueishtml'属性设置为true。我需要通过EL将检索到的数据(即没有任何html标签)传递给json变量。有人可以指导我如何做到这一点? 。下面是我需要做的一个例子。请注意这不是代码。

var mydatawithouthtml = <dsp:valueof param="product.data" valueishtml="true"/>

<json:property name="data" value="${mydatawithouthtml}" />

目前“product.data”包含传递给json的html标签。需要没有任何html标签的json数据。

TIA

1 个答案:

答案 0 :(得分:0)

最简单的方法是开发自己的tagconverter。一个简单的实现方法如下:

package com.acme.tagconverter;

import java.util.Properties;
import java.util.regex.Pattern;

import atg.droplet.TagAttributeDescriptor;
import atg.droplet.TagConversionException;
import atg.droplet.TagConverter;
import atg.droplet.TagConverterManager;
import atg.nucleus.GenericService;
import atg.nucleus.ServiceException;
import atg.servlet.DynamoHttpServletRequest;

public class StripHTMLConverter extends GenericService implements TagConverter {

    private Pattern tagPattern;

    @Override
    public void doStartService() throws ServiceException {
        TagConverterManager.registerTagConverter(this);
    }

    public String convertObjectToString(DynamoHttpServletRequest request, Object obj, Properties attributes) throws TagConversionException {
        return tagPattern.matcher(obj.toString()).replaceAll("");
    }

    public Object convertStringToObject(DynamoHttpServletRequest request, String str, Properties attributes) throws TagConversionException {
        return str;
    }

    public String getName() {
        return "striphtml";
    }

    public TagAttributeDescriptor[] getTagAttributeDescriptors() {
        return new TagAttributeDescriptor[0];
    }

    public void setTagPattern(String tagPattern) {
        this.tagPattern = Pattern.compile(tagPattern);
    }

    public String getTagPattern() {
        return tagPattern.pattern();
    }

}

然后通过组件属性文件引用它,其中包含模式:

$class=com.acme.tagconverter.StripHTMLConverter
tagPattern=<[^>]+>

显然,这假设起始'&lt;'之间的所有内容并结束'&gt;'应该删除。您可以自己使用RegEx来找到更好的模式。

您还应该在Initial.properties

中注册TagConverter
$class=atg.nucleus.InitialService
$scope=global

initialServices+=\
    /com/acme/tagconverter/StripHTMLConverter 

现在你应该可以按照预期使用它了。

var mydatawithouthtml = '<dsp:valueof param="product.data" converter="striphtml"/>'