我有一个页面(表单)设置如下:
<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)>
,因为我不希望从前几页清除的所有会话变量只希望重置此页面。(不是所有页面或所有会话变量)。任何有关这方面的帮助将不胜感激!
答案 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>