ColdFusion链接到上一页仅清除页面​​会话变量

时间:2015-05-21 13:56:17

标签: coldfusion

我有一个页面(表单)设置如下:

<cfif not structKeyExists(session, "checkout")>
    <cflocation url="ownerInfo.cfm" addToken="false">
</cfif>

<cfif not structKeyExists(session.checkout, "vehicle")>
    <cfset session.checkout.vehicle = {ownership=""}

<cfparam name="form.ownership" default="#session.checkout.vehicle.ownership#">

<cfif structKeyExists(form, "submit")>

    <cfset errors = []>
    <cfif not arrayLen(errors)>
        <cfset session.checkout.vehicle = {ownership=form.ownership}
        <cflocation url="ownerCheck.cfm" addToken="false">
    </cfif>
</cfif>

我试图找出如何重置此表单,方法是在另一个页面上链接,当此页面链接回它时,会将所有会话变量重置为null,从而使整个页面需要再次填写。

这是我尝试的但是没有成功。

<cfif session.checkout.vehicle.ownership != null />
    <cfset session.checkout.vehicle.ownership = null />
</cfif>

我不能使用<cfset StructClear(Session)>,因为我不希望从前几页清除的所有会话变量只希望重置此页面。(不是所有页面或所有会话变量)。任何有关这方面的帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

您可以使用structDelete(结构,键)

<cfif session.checkout.vehicle.ownership != null />
    <cfset structDelete(session.checkout.vehicle,'ownership ')>
</cfif>

答案 1 :(得分:0)

如果要在会话范围中已存在ownership密钥时清除会话范围变量,则可以执行以下操作:

<cfif structKeyExists(session.checkout.vehicle, "ownership")>
    <!--- struct key exists so delete it --->
    <cfset structDelete(session.checkout.vehicle, "ownership")>
</cfif>

你实际上可以这样做:

<cfif structKeyExists(session.checkout, "vehicle")>
    <!--- try and delete ownership key might not exist --->
    <cfset structDelete(session.checkout.vehicle, "ownership")>
</cfif>

只要父作用域存在,您可以尝试删除ownership键,而无需先检查它是否存在。

如果你想知道密钥是否存在,那么structDelete会接受第3个布尔参数,所以如果确实存在则返回true,如果不存在则返回false。

<cfset didExist = structDelete(session.checkout.vehicle, "ownership", true)>

解决问题的另一种方法是重置表单,如果它不是表单(POST)提交。所以你要这样做:

<cfif structKeyExists(form, "submit")>
   <!--- form has been submitted store values in session and redirect... -->
<cfelse>
   <!--- form not submitted so clear the session vars... --->
</cfif>