我在带有 Java 1.6.0_22 的 Windows Server 2008 R2 上运行 ColdFusion Enterprise 9.0.1.274733。
我正在调用向我返回各种数据的 SOAP Web 服务。其中一个数据元素包含由带前导零的数字组成的代码。我正在尝试将该代码转换为文本描述,但前导零有问题。我尝试过使用cfswitch
标签以及带有cfif
标签的各种东西。他们的行为有点不同。我正在寻找一些关于如何最好地处理这些代码的建议。
以下是描述查找的代码示例:
Code Description
01 Automobile
010 Personal Automobile
011 Commercial Automobile
02 Home
03 Boat
10 Life
11 Umbrella
我最初尝试使用cfswitch
块来处理此问题,但发现它将代码视为整数。就目前cfswitch
而言;010
等于10
。我也尝试过使用cfif
. 它似乎也在比较过程中转换了值。因此,就cfif
目前而言,情况正好相反。 10
等于010
。
大家是怎么处理这个问题的?
这是一些示例代码,显示了正在发生的事情:
<html>
<head><title>Test</title></head>
<body>
<h3>Test</h3>
<cfset testvals = "01,010,011,10,11,12" />
<cfoutput>
<div>
<cfloop list="#testvals#" index="testval">
<p>testval = [#testval#]
<cfswitch expression="#testval#">
<cfcase value="01"> <cfset desc="matches 01" /> </cfcase>
<!---<cfcase value="010"> <cfset desc="matches 010" /></cfcase> --->
<!---<cfcase value="011"> <cfset desc="matches 011" /></cfcase> --->
<cfcase value="02"> <cfset desc="matches 02" /> </cfcase>
<cfcase value="03"> <cfset desc="matches 03" /> </cfcase>
<cfcase value="04"> <cfset desc="matches 04" /> </cfcase>
<cfcase value="08"> <cfset desc="matches 08" /> </cfcase>
<cfcase value="09"> <cfset desc="matches 09" /> </cfcase>
<cfcase value="10"> <cfset desc="matches 10" /> </cfcase>
<cfcase value="11"> <cfset desc="matches 11" /> </cfcase>
<cfcase value="12"> <cfset desc="matches 12" /> </cfcase>
<cfdefaultcase> <cfset desc="no match" /> </cfdefaultcase>
</cfswitch>
<br />cfswitch: #desc#
<cfif testval EQ "01">
<cfset desc="matches 01" />
<cfelseif testval EQ "010">
<cfset desc="matches 010" />
<cfelseif testval EQ "011">
<cfset desc="matches 011" />
<cfelseif testval EQ "02">
<cfset desc="matches 02" />
<cfelseif testval EQ "03">
<cfset desc="matches 03" />
<cfelseif testval EQ "04">
<cfset desc="matches 04" />
<cfelseif testval EQ "08">
<cfset desc="matches 08" />
<cfelseif testval EQ "09">
<cfset desc="matches 09" />
<cfelseif testval EQ "10">
<cfset desc="matches 10" />
<cfelseif testval EQ "11">
<cfset desc="matches 11" />
<cfelseif testval EQ "12">
<cfset desc="matches 12" />
<cfelse>
<cfset desc="no match" />
</cfif>
<br />cfif: #desc#
<cfif toString(testval) EQ "01">
<cfset desc="matches 01" />
<cfelseif toString(testval) EQ "010">
<cfset desc="matches 010" />
<cfelseif toString(testval) EQ "011">
<cfset desc="matches 011" />
<cfelseif toString(testval) EQ "02">
<cfset desc="matches 02" />
<cfelseif toString(testval) EQ "03">
<cfset desc="matches 03" />
<cfelseif toString(testval) EQ "04">
<cfset desc="matches 04" />
<cfelseif toString(testval) EQ "08">
<cfset desc="matches 08" />
<cfelseif toString(testval) EQ "09">
<cfset desc="matches 09" />
<cfelseif toString(testval) EQ "10">
<cfset desc="matches 10" />
<cfelseif toString(testval) EQ "11">
<cfset desc="matches 11" />
<cfelseif toString(testval) EQ "12">
<cfset desc="matches 12" />
<cfelse>
<cfset desc="no match" />
</cfif>
<br />tostring: #desc#
</p>
</cfloop>
</div>
</cfoutput>
</body>
</html>
请注意,我必须注释掉和cfcase
的值的标签以避免错误。如果那些在然后我得到这个错误:010
011
cfswitch
Context validation error for the cfcase tag. The cfswitch tag has a duplicate cfcase tag for value 10.0. The error occurred on line -1.
以下是示例代码的输出:
Test
testval = [01]
cfswitch: matches 01
cfif: matches 01
tostring: matches 01
testval = [010]
cfswitch: matches 10 // trying to avoid this
cfif: matches 010
tostring: matches 010
testval = [011]
cfswitch: matches 11 // trying to avoid this
cfif: matches 011
tostring: matches 011
testval = [10]
cfswitch: matches 10
cfif: matches 010 // trying to avoid this
tostring: matches 010 // trying to avoid this
testval = [11]
cfswitch: matches 11
cfif: matches 011 // trying to avoid this
tostring: matches 011 // trying to avoid this
testval = [12]
cfswitch: matches 12
cfif: matches 12
tostring: matches 12