如果structKeyExists和value是这样,否则这样做

时间:2015-01-09 16:36:39

标签: coldfusion

我要做的是查看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>

4 个答案:

答案 0 :(得分:4)

在您的代码示例中,trim函数实际上正在修剪字符串&#34; session.checkout.info.gender_1&#34;不是变量。删除引号,然后重试。

<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>

答案 1 :(得分:4)

您应该对测试进行分层。你的测试应该更像......

<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>

答案 2 :(得分:1)

这是一种格式化的评论。像这样排除你的if / else逻辑:

<cfif myVariable is theExpectedValue>
yes
<cfelse>
no
<cfdump var = "expected #theExpectedValue# and got #myVariable#>
</cfif>

完成逻辑分类后,插入每个条件的实际代码。

答案 3 :(得分:0)

试试这个

<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,当未定义变量或为空时。

由于您将男性与M和女性匹配为F,我们可以使用Left()来获取第一个字母。