【问题标题】:Can you set a default value for an argument in a remote CFC function?您可以为远程 CFC 函数中的参数设置默认值吗?
【发布时间】:2012-01-09 16:18:30
【问题描述】:

ColdFusion 8 文档对 CFARGUMENT 的“必需”属性进行了如下说明:

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

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

【问题讨论】:

标签: coldfusion arguments remote-access cfc


【解决方案1】:

是和否。

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

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

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

  2. 找到您定义的、希望成为可选的参数:

<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 服务,对您不希望传递的参数使用“省略”属性:
<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.

【讨论】:

  • 谢谢。我有一个预先构建的 WSDL,所以我为每个参数添加了 default=""。
【解决方案2】:

在 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>

【讨论】:

  • 他正在研究 CF8,而发布的 CF8 代码不起作用。我知道,因为那是我的第一个答案,然后我回去测试它......它失败了。
  • 奇怪,我刚刚在 CF8 服务器上尝试过,效果很好: #arg1#
  • Ben,您将参数设置为 'required="true"',OP 正在请求有关您是否可以有可选参数的信息,即 'required="false"' .尝试将其翻转为 false,设置默认参数,然后重试。您最终应该会看到有关无效参数的错误。
  • OP:“那么,我可以为所需参数设置一个默认值吗?”他已经表示他意识到远程功能需要这些参数。他的解决方法是设置一个默认值并从那里模拟可选参数。他所问的只是如何为参数设置默认值。
  • 如果在调用函数时始终提供默认参数,则 100% 无效 - 并且不使用上面指定的解决方法 - 函数调用将始终要求传递参数,从而否定默认参数。 “您可以为远程 CFC 函数中的参数设置默认值吗?”...是的。 “你能用吗?”……不,没有上面的干预是不行的。对我们来说,在 Stack 上用我们的答案描绘更大的图景很重要。
猜你喜欢
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 2011-04-18
  • 2014-04-28
  • 1970-01-01
  • 2010-10-28
相关资源
最近更新 更多