我正在尝试使用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对象相当新,所以这让我很难过。
非常感谢任何帮助。
谢谢, 迈克尔。
答案 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 arguments:addTags("tag1", "tag2", ...)
。但是,CF仅支持数组语法。因此,如果你cfdump java对象,你会在类名后面看到方括号,表示参数是一个数组:
method: addTags( java.lang.String[] ) // array of strings