2011-01-31 53 views
2

フォームタグ内にチェックボックスがあり、基本的にセッションを使用してチェックボックスのチェック状態を維持したいとします。どうやら私はページをリロードするたびにセッションをオフに戻すので(チェックボックスのパラメータのデフォルト値)、間違っていると思います。ここで私が使用しているコードです。ColdFusionフォームとセッション変数の設定

フォーム:

<cfform name="matureContent" method="post" action="/index.cfm?fuseaction=main.Channels_Detail&c=#URL.c#" enctype="multipart/form-data"> 
     <cfif SESSION.matureSession eq "on"> 
     <input name="myCheckbox" type="checkbox" checked="checked" /> 
     <cfelse> 
     <input name="myCheckbox" type="checkbox"/> 
     </cfif> 
     <input type="submit" value="Save" /> 
     </cfform> 

セッション変数とのparamsは、ページのロード上に存在しない場合。

<cfparam name="form.myCheckbox" default="off"> 
<cfparam name="SESSION.maturesession" default="off"> 
<cfset SESSION.maturesession = form.myCheckbox> 

私はこのことについて完全に間違った方法で私に知らせています。ありがとう。

+0

セッションを設定するコードブロックの後に ' 'を使用していますか?もしそうなら、それが問題です。このテクニカルノートを参照してください:http://kb2.adobe.com/cps/181/tn_18171.html – orangepips

答えて

4

<cfparam name="form.myCheckbox" default="off">
<cfparam name="SESSION.maturesession" default="off">
<cfset SESSION.maturesession = form.myCheckbox>

私はあなたがどこか別の場所からのページに戻る場合には、保存された値を上書きすることになると思います。代わりに、フォームが送信されたときにのみセッション値を更新してみてください。また、cfformを使用しているので、on/offの代わりにyes/noを使ってショートカットすることもできます。

更新私はセッション変数のcfparamを忘れていました。しかし、セッション中に本当にそれを持ちたい場合は、代わりにonSessionStartを初期化することもできます。

<cfparam name="SESSION.maturesession" default="no"> 
<cfif structKeyExists(FORM, "submit")> 
    <cfparam name="form.myCheckbox" default="no"> 
    <cfset SESSION.maturesession = form.myCheckbox> 
</cfif> 

<cfform name="test" method="post" ....> 
    <cfinput name="myCheckbox" type="checkbox" value="yes" checked="#session.matureSession#" /> 
    <input type="submit" name="submit" value="Save" /> 
</cfform> 
1

実際にセッションを有効にしていますか?

Application.cfmを使用している場合はCFAPPLICATIONタグを使用して、またはApplication.cfcを使用している場合はthis.sessionManagement = trueを設定して、アプリケーションのセッションを明示的にオンにする必要があります。

のApplication.cfm:

<cfapplication 
    name = "application name" 
    applicationTimeout = #CreateTimeSpan(0,2,0,0)# 
    sessionManagement = "yes" 
    sessionTimeout = #CreateTimeSpan(0,0,20,0)#> 

のApplication.cfc:

<cfcomponent output="false"> 
    <!--- Application name, should be unique ---> 
    <cfset this.name = "ApplicationName"> 
    <!--- How long application vars persist ---> 
    <cfset this.applicationTimeout = createTimeSpan(0,2,0,0)> 
    <!--- Should we even use sessions? ---> 
    <cfset this.sessionManagement = true> 
    <!--- How long do session vars persist? ---> 
    <cfset this.sessionTimeout = createTimeSpan(0,0,20,0)> 
</cfcomponent> 

OK、その後、セッションがオンになっている場合は、フォームを送信する際に、コードを見てあなたのことのように何をしますか」フォームを転記し直しますか?

+0

セッションはオンになっていて動作していますが、ページを離れて戻ってきたときにセッションはデフォルトのパラメータに戻されます。 –

+0

フォームを送信すると、フォームを送信するコードはどのようなものになりますか? main.Channels_Detailテンプレートでセッション変数を設定していますか? –

+0

私の元の投稿には、フォームコードとセッションがその価値をどのように受け取っているかが含まれていました。 –

関連する問題