【问题标题】:Can a cfargument be of type "list"?cfargument 可以是“列表”类型吗?
【发布时间】:2011-09-11 01:24:36
【问题描述】:

我想要这样的论点:

<cfargument 
  name="exclude" 
  type="list" 
  required="false" 
  default="-1" 
  hint="A list of source IDs that should be excluded"
>

我在 http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_a-b_6.html 的文档中没有看到它,因为我不太信任他们。

有谁知道这是否可行,或者我必须转换为数组吗?

目前出现错误:

传递给 renderSelectSource 函数的 EXCLUDE 参数不是列表类型。

并不是在抱怨“list”不是一个有效的类型,而是可能只是一个糟糕的错误信息。

【问题讨论】:

  • 正如查理所说,正确的类型可能是string。回复:错误,因为list 不是基本类型之一(字符串、布尔值、数字......)CF 将假定它是一个组件名称。您可能没有 /List.cfc 因此出现错误。

标签: list coldfusion arguments coldfusion-8


【解决方案1】:

这种情况下的类型是“字符串”。列表只是一个字符串。

您可以转换为数组...但除非它为您购买了我没有看到的东西,否则我认为仅将参数声明为字符串不会有问题。

【讨论】:

    【解决方案2】:

    在这种情况下,我通常会允许使用分隔字符串(即列表)或数组。特别是,这使您可以处理数组值包含分隔符(即逗号)的情况。例如:

    <cffunction name="myFunction" output="false" access="public" returntype="any" hint="">
        <cfargument name="multiValuedArg" type="any" required="true"/>
        <cfif isSimpleValue(arguments.multiValuedArg)>
            <cfset arguments.multiValuedArg = listToArray(arguments.multiValuedArg)>
        <cfelseif NOT isArray(arguments.multiValuedArg)>
            <cfthrow type="java.lang.IllegalArgumentException"
                message="'multiValuedArg' argument must be an array or comma delimited list">
        </cfif>
    </cffunction>
    

    【讨论】:

    • type="java.lang.IllegalArgumentException"?使用它有什么好处?它真的会抛出那个obj吗?还是只是一个字符串?
    • @Henry:优势在于语义。在指定&lt;cfthrow/&gt;type 属性时,我尝试使用符合意图的现有Java 异常。因此,如果您查看它的 javadoc:download.oracle.com/javase/1,5.0/docs/api/java/lang/…,您可以看到它是如何排列的。我还没有测试过它是否真的会生成该类型的 Java 异常对象,但 &lt;cfcatch type="java.lang.IllegalArgumentException"&gt; 会正确捕获 ColdFusion 或 Java 生成的异常。
    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多