3

CまたはPerlのsprintfに似たColdFusionで何かをしたい。私はこの 答えを見つけました、それは私が探しているもののようです。しかし、私はそれを動作させることができません。

これが私が試していることです:

<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が確実に解読できない引数タイプでformatメソッドがオーバーロードされています。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で別の静的メソッドを試しましたが、正常に機能しました。

編集: 私はすでにコメントを見ました、そして私はそれらにどのように応答するかわかりません、しかし多分私はここで説明するべきです。上に示したのは、私がやろうとしていることの非常に単純化された例です。目標は、フォーマット文字列を使用して1つの場所で多くのフォーマットを提供し、変数の束をフォーマットして出力したり、出力時にフォーマットしたりする代わりに、変数のリストを渡すことです。formatメソッドを使用して、必要な出力に一致する一連のフォーマット文字列を作成する予定です。次に、クエリに対してcfloopまたはcfoutputを実行し、この1つのメソッドを内部で実行して、必要な出力を取得します。DateFormat、NumberFormat、Left、Rightなどはありません。これが機能しない場合は、プランBです。

私はColdFusion9.01、Windows 7、Java1.6.0_22を実行しています。

ありとあらゆる助けを大いに感謝します。

4

1 に答える 1

1

上記の私のコメントに基づいて答えてください:

シグネチャがformat(String、Object [])であり、2番目のString引数をオブジェクト配列に自動的に変換できないため、探しているformatメソッドと一致しない可能性があります。

次のように、引数を変更して名前を配列にカプセル化できますformat("Hello, %s!", [firstName])

とても礼儀正しくしてくれたリーに感謝します、私はあなたのコメントに賛成しました:)

于 2012-04-19T19:19:48.070 に答える