ColdFusion和JSoup - 找不到addTags方法错误

时间:2012-09-10 15:46:31

标签: java coldfusion jsoup

我正在尝试使用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对象,并且存在添加标签方法。如果我删除addTags()方法并使用标准的JSoup白名单之一,如basic(),none()或relaxed(),那么代码运行完美。据我可以从其他在线示例中看到,这是使用addTags()方法的正确语法。

我在ColdFusion中使用Java对象相当新,所以这让我很难过。

非常感谢任何帮助。

谢谢, 迈克尔。

1 个答案:

答案 0 :(得分: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。在java中,您可以使用数组或此语法传递variable number of argumentsaddTags("tag1", "tag2", ...)。但是,CF仅支持数组语法。因此,如果你cfdump java对象,你会在类名后面看到方括号,表示参数是一个数组:

     method:  addTags( java.lang.String[] )  // array of strings