如果 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 报告显示性别未定义,但这至少可以让您进行一些调试。

但是,由于您要检查性别是否存在,它似乎是可选的,在这种情况下,您可以使用相同的代码将性​​别的值设置为 XNot Set,当变量未定义或为空。

并且由于您将 Male 与 M 匹配,将 Female 与 F 匹配,我们可以使用 Left() 来获取第一个字母。