Coldfusion 结构中的会话变量';与';类型'';数组';

Coldfusion 结构中的会话变量';与';类型'';数组';,coldfusion,Coldfusion,嗨,我有一个名为“tsks_会话”的CFC/组件,它执行会话任务。在这个cfc/init()函数中,创建了一个包含应用程序所需的所有变量的结构。其中一些变量是数组类型 <cfcomponent > <cffunction name="init"> <cfargument name="structKey" > <cflock timeout="35" > <cfset SESS

嗨,我有一个名为“tsks_会话”的CFC/组件,它执行会话任务。在这个cfc/init()函数中,创建了一个包含应用程序所需的所有变量的结构。其中一些变量是数组类型

<cfcomponent  >
        <cffunction name="init">
        <cfargument name="structKey" >
        <cflock timeout="35" >
         <cfset SESSION = structNew() > 
         <cfset SESSION.bar_code = "" > 
         <cfset SESSION.price = "" >  
         <cfset SESSION.pub_date = "01/01/1900" > 
         <cfset SESSION.author = ArrayNew() >
         <cfset SESSION.title = ArrayNew() >    
         <cfset SESSION.[bar_code_subj_pric] = structNew() > <!--- key = concatanation of    
                                                             bar_code and price --->
         <cfset SESSION.[bar_code_subj_pric].author = ArrayNew() >
         <cfset SESSION.[bar_code_subj_pric].title = ArrayNew() >
        </cflock>
      </cffunction>
     <!---getter--->
     <cffunction name="getAuthor" returntype="array" access="public" output="false"> 
       <cfscript>return SESSION.author;   </cfscript> 
     </cffunction>
     <!---setter:adding the Array/"author"  to the structue/"SESSION.[bar_code_subj_pric]" --->
     <cffunction name="setAuthor" retuntype="void" access="public" output="false"> 
     <cfargument name="bar_code_subj_pric" type="string"  required="true">
     <cfargument name="author" type="array"  required="true">
     <cfset var q = "" >
     <cfparam name="author" default="" >
      <cfloop index="i" from="1" to="arrayLen(SESSION.[bar_code_subj_pric].author)">
       <cfset SESSION.author = ArrayAppend(SESSION.[bar_code_subj_pric].author,"#arguments.author#")>
      </cfloop>
     </cffunction> 

     <!---getter.title--->
     <cffunction name="gettitle" returntype="array" access="public" output="false"> 
       <cfscript>return SESSION.title;   </cfscript> 
     </cffunction>
     <!---setter:adding the Array/"title"  to the structue/"SESSION.[bar_code_subj_pric]" --->
     <cffunction name="settitle" retuntype="void" access="public" output="false"> 
     <cfargument name="bar_code_subj_pric" type="string"  required="true">
     <cfargument name="title" type="array"  required="true">
     <cfset var q = "" >
     <cfparam name="title" default="" >
      <cfloop index="i" from="1" to="arrayLen(SESSION.[bar_code_subj_pric].title)">
       <cfset SESSION.title = ArrayAppend(SESSION.[bar_code_subj_pric].title,"#arguments.title#")>
      </cfloop>
     </cffunction>  
    </cfcomponent>

返回SESSION.author;
返回会话.title;
1) 在显示页面上,已实例化cfc, 我创建了一个名为

<cfset str[expld133] =structnew()>

当我输出函数setAuthor(“expld133”,Kelly)/setTitle(“expld133”,33.22)时,我得到
“我没有传递数组类型的值”。
请告诉我怎么了

2) 我可以创建一个名为“会话”的结构吗?它安全吗

3) 我将两个不同的数组(作者/标题)添加到主结构“SESSION.[bar_code_sub_pric]”中的方式是否有错误?

对于问题1,我认为失败的一行可能是以下两行之一:

setAuthor("expId133", Kelly);
setTitle("expId133", 33.22);
这两种方法都希望数组对象作为第二个参数;但在第一种情况下,传递一个名为“Kelly”的变量,在第二种情况下传递一个数字。如果“Kelly”应该是值,而不是变量名,则必须引用它(
“Kelly”
不是
Kelly
),但这仍然不是数组。如果您希望它是一个包含1个字符串“Kelly”的数组,那么您将传递
[“Kelly”]
,假设您使用的是CF8或更高版本

对于问题2,您可以创建一个名为“SESSION”的变量(它将进入组件的变量范围),并且它是“安全的”。。。但我强烈建议不要这样做。你只是想引起混乱。此外,它(结构)不会存储在会话范围中(除非组件存储在那里)。为什么不直接使用会话范围呢?为什么要创建一个名为“SESSION”的新结构

对于问题3,我不确定这是否是有效的语法,但我猜不是。请尝试以下任一方法:

SESSION[bar_code_subj_pric] = foo;
这将使用
bar\u code\u subc\u pric
作为变量,其值将是结构键名称。因此,如果
bar\u code\u subc\u pric
的计算结果为4,则整个语句的计算结果为:
session.4=foo

另一方面,该代码:

SESSION.bar_code_subj_pric = foo;
//this is also equivalent to:
//SESSION["bar_code_subj_pric"] = foo;
。。。在会话结构中创建一个名为“bar_code_subc_pric”的键,其值为foo变量/object