【发布时间】:2012-01-09 16:18:30
【问题描述】:
ColdFusion 8 文档对 CFARGUMENT 的“必需”属性进行了如下说明:
“当作为 Web 服务调用时,所有参数都是必需的,无论它们是如何定义的。”
但是,我不希望 ColdFusion 在请求中缺少参数时引发异常。作为请求的一部分,我想自己处理它。那么,我可以为所需的参数设置一个默认值吗?
【问题讨论】:
标签: coldfusion arguments remote-access cfc
ColdFusion 8 文档对 CFARGUMENT 的“必需”属性进行了如下说明:
“当作为 Web 服务调用时,所有参数都是必需的,无论它们是如何定义的。”
但是,我不希望 ColdFusion 在请求中缺少参数时引发异常。作为请求的一部分,我想自己处理它。那么,我可以为所需的参数设置一个默认值吗?
【问题讨论】:
标签: coldfusion arguments remote-access cfc
是和否。
正式地,您不能,因为 ColdFusion 生成的 WSDL 在 XML 中遗漏了一个重要的要求,即允许不传递可选参数。该属性是“minOccurs”。因此,虽然设置“默认”属性(连同一个值)对您来说是完全有效的——但您将永远无法将其设置为“required=false”并利用默认值,因为远程方法总是需要传递一些东西。
但是,有一种方法可以非正式地设置一个可选参数,并在需要时设置其默认值:
使用最后的标准“?wsdl”参数将 WSDL 生成到您的 CFC,并将代码保存到自己的文档中。
找到您定义的、希望成为可选的参数:
<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>
<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.
【讨论】:
在 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>
【讨论】: