如果 structKeyExists 和 value 是这样,否则执行此操作
If structKeyExists and value is this otherwise do this
我想做的是查看 session.checkout.info.gender_1
是否存在,然后它是否还检查它是男性还是女性。根据它是哪一个,cfpdfformparam 的值为 M 或 F,以便它更适合表格。我试过"IsDefined",不是""。有人会告诉我哪里出错了吗?
<cfif structKeyExists(session, 'checkout.info.gender_1') and trim("session.checkout.info.gender_1") neq "Female">
<cfpdfformparam name="sex" value="M">
</cfif> <!---Section1 Owner Sex--->
<cfif structKeyExists(session, 'checkout.info.gender_1') and trim("session.checkout.info.gender_1") neq "Male">
<cfpdfformparam name="sex" value="F">
</cfif>
在您的代码示例中,trim
函数实际上是在修剪字符串 "session.checkout.info.gender_1" 而不是变量。删除引号并重试。
<cfif structKeyExists(session, 'checkout.info.gender_1') and trim(session.checkout.info.gender_1) neq "Female">
<cfpdfformparam name="sex" value="M">
</cfif> <!---Section1 Owner Sex--->
<cfif structKeyExists(session, 'checkout.info.gender_1') and trim(session.checkout.info.gender_1) neq "Male">
<cfpdfformparam name="sex" value="F">
</cfif>
这是格式化的评论。像这样解决您的 if/else 逻辑问题:
<cfif myVariable is theExpectedValue>
yes
<cfelse>
no
<cfdump var = "expected #theExpectedValue# and got #myVariable#>
</cfif>
理清逻辑后,为每个条件插入实际代码。
您应该对测试进行分层。你的测试应该更像这样...
<cfif isDefined("session")
and structKeyExists(session, 'checkout')
and structKeyExists(session.checkout, 'info')
and structKeyExists(session.checkout.info, 'gender_1') >
<cfif session.checkout.info.gender_1 eq "Female">
do this
<cfelse>
do that
</cfif>
</cfif>
试试这个
<cfif structKeyExists(session, 'checkout.info.gender_1') and len(trim(session.checkout.info.gender_1))>
<cfpdfformparam name="sex" value="#UCase(Left(Trim(session.checkout.info.gender_1),1))#">
<cfelse>
<cfpdfformparam name="sex" value="Undefined">
</cfif>
您可能真的不希望您的 pdf 报告显示性别未定义,但这至少可以让您进行一些调试。
但是,由于您要检查性别是否存在,它似乎是可选的,在这种情况下,您可以使用相同的代码将性别的值设置为 X
或 Not Set
,当变量未定义或为空。
并且由于您将 Male 与 M 匹配,将 Female 与 F 匹配,我们可以使用 Left()
来获取第一个字母。
我想做的是查看 session.checkout.info.gender_1
是否存在,然后它是否还检查它是男性还是女性。根据它是哪一个,cfpdfformparam 的值为 M 或 F,以便它更适合表格。我试过"IsDefined",不是""。有人会告诉我哪里出错了吗?
<cfif structKeyExists(session, 'checkout.info.gender_1') and trim("session.checkout.info.gender_1") neq "Female">
<cfpdfformparam name="sex" value="M">
</cfif> <!---Section1 Owner Sex--->
<cfif structKeyExists(session, 'checkout.info.gender_1') and trim("session.checkout.info.gender_1") neq "Male">
<cfpdfformparam name="sex" value="F">
</cfif>
在您的代码示例中,trim
函数实际上是在修剪字符串 "session.checkout.info.gender_1" 而不是变量。删除引号并重试。
<cfif structKeyExists(session, 'checkout.info.gender_1') and trim(session.checkout.info.gender_1) neq "Female">
<cfpdfformparam name="sex" value="M">
</cfif> <!---Section1 Owner Sex--->
<cfif structKeyExists(session, 'checkout.info.gender_1') and trim(session.checkout.info.gender_1) neq "Male">
<cfpdfformparam name="sex" value="F">
</cfif>
这是格式化的评论。像这样解决您的 if/else 逻辑问题:
<cfif myVariable is theExpectedValue>
yes
<cfelse>
no
<cfdump var = "expected #theExpectedValue# and got #myVariable#>
</cfif>
理清逻辑后,为每个条件插入实际代码。
您应该对测试进行分层。你的测试应该更像这样...
<cfif isDefined("session")
and structKeyExists(session, 'checkout')
and structKeyExists(session.checkout, 'info')
and structKeyExists(session.checkout.info, 'gender_1') >
<cfif session.checkout.info.gender_1 eq "Female">
do this
<cfelse>
do that
</cfif>
</cfif>
试试这个
<cfif structKeyExists(session, 'checkout.info.gender_1') and len(trim(session.checkout.info.gender_1))>
<cfpdfformparam name="sex" value="#UCase(Left(Trim(session.checkout.info.gender_1),1))#">
<cfelse>
<cfpdfformparam name="sex" value="Undefined">
</cfif>
您可能真的不希望您的 pdf 报告显示性别未定义,但这至少可以让您进行一些调试。
但是,由于您要检查性别是否存在,它似乎是可选的,在这种情况下,您可以使用相同的代码将性别的值设置为 X
或 Not Set
,当变量未定义或为空。
并且由于您将 Male 与 M 匹配,将 Female 与 F 匹配,我们可以使用 Left()
来获取第一个字母。