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

Mic*_*ael 4 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"))>
Run Code Online (Sandbox Code Playgroud)

我已经抛弃了Whitelist对象,并且存在添加标签方法.如果我删除addTags()方法并使用标准的JSoup白名单之一,如basic(),none()或relaxed(),那么代码运行完美.据我可以从其他在线示例中看到,这是使用addTags()方法的正确语法.

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

任何帮助将不胜感激.

谢谢,迈克尔.

Lei*_*igh 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 ))>
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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

     method:  addTags( java.lang.String[] )  // array of strings
Run Code Online (Sandbox Code Playgroud)