0

我有一个带有表格和“添加项目”按钮的表格。单击“添加项目”后,将打开第二个表单,用户可以在其中添加详细信息。单击第二页上的“提交”后,详细信息应作为新行添加到第一个屏幕的表格中。我正在使用数组和结构在数组中添加/追加。

每次用户尝试添加新行时,我都会在现有数组(第 1 页)中创建一个新结构并尝试在第一页上显示该数组。

<cfset arrayRequisition[k] = StructNew() />     
<cfset arrayRequisition[k].Part_Nbr = #Variables.ReqDescription# />     
<cfset arrayRequisition[k].Description = #Variables.EQT_DESCRIPTION# />     
<cfset arrayRequisition[k].Quantity = #Variables.RQT_QUANTITY# />   
<cfset arrayRequisition[k].Status = "pending" />    
<cfset arrayRequisition[k].Line_No = #i# /> 

K是每次添加和递增的行数。但是,当我这样做时出现错误:

“未找到数组字段 1”。

当我解决这个问题时,表格只显示最后一行。

<cfoutput>
 <table border="1">
  <tr>
    <td style="font-weight:bold;">Part_Nbr&nbsp;&nbsp;</td>
    <td style="font-weight:bold;">Description&nbsp;&nbsp;</td>
    <td style="font-weight:bold;">Quantity&nbsp;&nbsp;</td>
    <td style="font-weight:bold;">Status&nbsp;&nbsp;</td>
    <td style="font-weight:bold;">Line_No</td>
  </tr> 
  <cfdump var="#i#">
  <cfloop from="1" to="#arrayLen(arrayRequisition)#" index="j">
  <cfdump var="#arrayLen(arrayRequisition)#">
  <tr>
   <td>#arrayRequisition[j].Part_Nbr#</td>
   <td>#arrayRequisition[j].Description#</td>
   <td>#arrayRequisition[j].Quantity#</td>
   <td>#arrayRequisition[j].Status#</td>
   <td style="text-align:right;">#arrayRequisition[j].Line_No#</td>
 </tr>
 </cfloop>
 </table>
 </cfoutput> 

据我了解,在两页之间的转换过程中,我之前的结构数据/数组数据丢失了。在这种情况下如何保留我的数组的值?

4

2 回答 2

0

检查以确保它arrayRequisition确实是一个数组。通过使用您在第一个示例中显示的语法,CF 将创建一个结构,而不是一个数组。这样做varName[x] = someVar实际上会给你一个结构,其中包含变量值的键x

要创建一个数组,您需要创建一个包含键Part_nbrDescription等的结构,然后调用arrayAppend( arrayRequisition, newStruct)

于 2013-06-04T15:01:27.710 回答
0

听起来您有两个不同的 ColdFusion 模板(.cfm 文件)。如果是这种情况,那么您需要了解您在 ColdFusion 模板中使用的变量仅在该浏览器请求期间可用。一旦 ColdFusion 模板运行并将响应发送回用户,这些变量就会“丢失”。以下页面概述了 ColdFusion 应用程序的生命周期:ColdFusion 应用程序的元素

为了保留后续请求的值,您可以(这不是一个包罗万象的列表):

  • 每次提交表单时传递所有值
  • 将变量存储在持久范围中,例如session
  • 使用数据库存储值

然后根据您选择的选项,您的 ColdFusion 模板将需要更改以将值存储在持久位置(您的第二个模板)并从持久位置(您的第一个模板)读取现有值。

也可以重写整个过程以利用来自单个 ColdFusion 模板的 AJAX 调用。AJAX 函数将调用需要编写的新 ColdFusion CFC 来控制变量值的更新和检索。我相信这个选项对你来说会是一个更广泛的重写。

于 2013-06-04T13:59:12.130 回答