尝试使用ColdFusion中的java.lang.string格式方法时,获取“找不到格式方法”

时间:2012-04-17 21:43:19

标签: coldfusion coldfusion-9

我想在ColdFusion中做一些类似于C或Perl中的sprintf的东西。我找到了这个 answer,这似乎是我正在寻找的。但是,我无法让它发挥作用。

以下是我正在尝试的内容:

<cftry>
    <cfset firstName="John">
    <cfset output=createObject("java","java.lang.String").format("Hello, %s!", firstName)>
    <cfcatch type="any">
        <cfdump var="#cfcatch#" expand="false">
    </cfcatch>
<cftry>

这就是我得到的:

  

cfcatch.Message:找不到格式化方法。

     

cfcatch.Detail:没有指定方法的方法   名称和参数类型或格式方法重载   ColdFusion无法可靠解密的参数类型。 ColdFusion的   找到0个与提供的参数匹配的方法。如果这是一个Java   对象和您验证该方法存在,使用javacast   减少歧义的功能。

这是一个重载方法,所以我按照建议做了,并在参数上使用了JavaCast:

<cfset output=createObject("java","java.lang.String").format(JavaCast('string', "Hello, %s!"), firstName)>
<cfset output=createObject("java","java.lang.String").format("Hello, %s!", JavaCast('string', firstName))>
<cfset output=createObject("java","java.lang.String").format(JavaCast('string', "Hello, %s!"), JavaCast('string', firstName))>

每次都出现同样的错误。

我在String类上尝试了另一个静态方法valueOf,它运行正常。

修改 我已经看过评论了,我不知道如何回应这些,但也许我应该在这里解释一下。我上面展示的是一个极其简化的例子,说明了我要做的事情。目标是使用格式字符串在一个地方提供大量格式,然后简单地传入一个变量列表,而不是格式化一堆变量并输出它们,或者在我输出它们时格式化它们。使用format方法,我计划构建一组与我需要的输出相匹配的格式字符串,然后我将对查询进行cfloop或cfoutput,在里面运行这个方法,并获得我想要的输出。没有DateFormat,NumberFormat,Left,Right等。如果我不能让这个工作,那就是B计划。

我正在运行ColdFusion 9.01,Windows 7,Java 1.6.0_22。

非常感谢任何和所有帮助。

1 个答案:

答案 0 :(得分:1)

根据我上面的评论回答:

它可能无法匹配您正在寻找的格式方法,因为它的签名是格式(String,Object []),而您的第二个String参数不能自动转换为Object数组。

您可以更改参数以将名称封装在数组中,如下所示:format("Hello, %s!", [firstName])

感谢Leigh非常有礼貌,我赞成你的意见:)