ColdFusion 8文档说明了以下关于CFARGUMENT的“required”属性:
“作为Web服务调用时,所有参数都是必需的,无论它们是如何定义的。”
但是,我不希望ColdFusion在请求中缺少参数时抛出异常。作为请求的一部分,我想自己处理它。那么,我可以为所需参数设置默认值吗?
答案 0 :(得分:8)
是和否。
正式地,你不能,因为ColdFusion生成的WSDL在XML中留下了一个重要的要求,它允许不传递可选参数。该属性为“minOccurs”。因此,虽然设置“默认”属性(以及值)完全有效 - 但您永远无法将其设置为“required = false”并利用默认值,因为远程方法总是需要传递一些东西。
但是, 是一种非正式设置可选参数的方法,并在需要时设置其默认值:
使用最后的标准“?wsdl”参数为您的CFC生成WSDL,并将代码保存到自己的文档中。
找到您想要成为可选项的参数:
<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.
答案 1 :(得分:1)
:
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>