4

我正在尝试将 JSoup 与 ColdFusion 一起使用来清理一些 HTML,但遇到以下错误:

未找到 addTags 方法。要么没有具有指定方法名称和参数类型的方法,要么 addTags 方法被 ColdFusion 无法可靠破译的参数类型重载。ColdFusion 找到 0 个与提供的参数匹配的方法。如果这是一个 Java 对象并且您验证了该方法存在,请使用 javacast 函数来减少歧义。

我的代码如下:

<cfset jsoup = createObject('java','org.jsoup.Jsoup')>
<cfset Whitelist = createObject("java", "org.jsoup.safety.Whitelist")>

<cfset parsedhtml = jsoup.parse(form.contentrichtext)> 
<cfset post = parsedhtml.body().html()>
<cfset post = jsoup.clean(post, Whitelist.none().addTags("span"))>

我已经转储了 Whitelist 对象,并且存在 add Tags 方法。如果我删除 addTags() 方法并使用标准 JSoup 白名单之一,例如 basic()、none() 或 Relax(),则代码运行完美。据我从其他在线示例中可以看出,这是使用 addTags() 方法的正确语法。

我对在 ColdFusion 中使用 Java 对象还很陌生,所以这让我很困惑。

任何帮助将不胜感激。

谢谢,迈克尔。

4

1 回答 1

6

addTags方法需要一个字符串数组,而不仅仅是一个字符串。首先将值放入数组中:

<!--- create a CF array then cast it as type string[] --->  
<cfset tagArray = javacast("string[]", ["span"]) >
<cfset post = jsoup.clean(post, Whitelist.none().addTags( tagArray ))>

编辑:

据我从其他在线示例中可以看出,这是正确的语法

澄清一下,这正确的语法 - 对于 java.util. 在 java 中,您可以使用数组或以下语法传入可变数量的参数addTags("tag1", "tag2", ...): . 但是,CF 只支持数组语法。所以如果你cfdump这个java对象,你会在类名后面看到方括号,这表明参数是一个数组:

     method:  addTags( java.lang.String[] )  // array of strings
于 2012-09-10T16:37:18.247 回答