您可以为远程CFC功能中的参数设置默认值吗?

时间:2012-01-09 16:18:30

标签: coldfusion arguments remote-access cfc

ColdFusion 8文档说明了以下关于CFARGUMENT的“required”属性:

  

“作为Web服务调用时,所有参数都是必需的,无论它们是如何定义的。”

但是,我不希望ColdFusion在请求中缺少参数时抛出异常。作为请求的一部分,我想自己处理它。那么,我可以为所需参数设置默认值吗?

2 个答案:

答案 0 :(得分:8)

是和否。

正式地,你不能,因为ColdFusion生成的WSDL在XML中留下了一个重要的要求,它允许不传递可选参数。该属性为“minOccurs”。因此,虽然设置“默认”属性(以及值)完全有效 - 但您永远无法将其设置为“required = false”并利用默认值,因为远程方法总是需要传递一些东西。

但是, 是一种非正式设置可选参数的方法,并在需要时设置其默认值:

  1. 使用最后的标准“?wsdl”参数为您的CFC生成WSDL,并将代码保存到自己的文档中。

  2. 找到您想要成为可选项的参数:

  3. <element name="test">
          <complexType>
            <sequence>
              <element name="a" type="xsd:string"/>
              <element name="b" type="xsd:string"/>
              <element name="c" type="xsd:double"/>
              <element name="d" type="xsd:boolean"/>
            </sequence>
          </complexType>
    </element>
    

    并添加“minOccurs”属性,将其设置为0:

    <element name="test">
      <complexType>
        <sequence>
          <element name="a" type="xsd:string"/>
          <element name="b" type="xsd:string"/>
          <element name="c" type="xsd:double" minOccurs="0"/>
          <element name="d" type="xsd:boolean" minOccurs="0"/>
        </sequence>
      </complexType>
    </element>
    
    1. 使用您不希望传递的参数的“省略”属性调用您的Web服务:
    2. <cfinvoke webservice="http://localhost/mysavedwsdl.cfm" returnvariable="result" method="runTest">
        <cfinvokeargument name="a" omit="no" value="test123" />   
        <cfinvokeargument name="b" omit="no" value="test456" />
        <cfinvokeargument name="c" omit="yes" />
        <cfinvokeargument name="d" omit="yes" /> 
      </cfinvoke>
      

      来源:Issues when calling a ColdFusion web service with optional arguments.

答案 1 :(得分:1)

CF9 CFScript中的

component // {
    output='true'
 {

    remote function testMethod (
        string argument1='testValue'
    ) 
        output='true'
    {
        writeOutput(arguments.argument1);
    }
}

或标签版本,应该在CF8中使用:

<cffunction name="testMethod">
    <cfargument name="arg1" type="string" default="default">
</cffunction>