gpt4 book ai didi

forms - 如何在 Coldfusion CFC 中声明动态表单字段默认值?

转载 作者:行者123 更新时间:2023-12-04 05:09:31 26 4
gpt4 key购买 nike

我正在寻找一种在 CFC 中动态声明表单默认值的方法,我通过 AJAX 调用。当前的 CFC 发送订单,我需要将其分解为子订单。

我一直在使用这个:

 <!--- static defaults --->
<cffunction name="Defaults" access="public" returntype="struct" output="false"
hint="Assign default values to instance">
<cfscript>
var formDefaults = {
versenden=""
, speichern=""
...
}
</cfscript>
<cfreturn formDefaults />
</cffunction>

<cffunction name="Commit" access="public" returntype="struct" output="false" hint="database handler">

<!--- add dynamic form fields --->
<cfscript>
var LOCAL = {};
variables.defs = THIS.Defaults();
</cfscript>
<cfloop collection="#VARIABLES.Instance.FormData#" item="formField">
<cfscript>
if ( LEFT(formField, 5) EQ "MENGE"
OR LEFT(formField, 3) EQ "EAN"
OR LEFT(formField, 12) EQ "BESTELL_TEXT"
OR LEFT(formField, 10) EQ "BESTELLTYP"
...
) {
variables.defs[formField]="";
}
</cfscript>
</cfloop>
<cfscript>
structAppend(variables.defs, VARIABLES.Instance.FormData);
LOCAL.Basket = variables.defs;
</cfscript>

...

所以我首先声明静态表单字段(仅限单个实例),然后尝试将动态表单字段动态附加到我的数组中,这可能会被多次传输( MENGE38, MENGE39, MENGE40 等)

虽然这可以正常工作,但我需要在表单名称中添加另一个计数元素,因此我必须更改 MENGE类似于 counter.MENGEMENGE.counter然后将发送这样的表单值:
MENGE.1.38
MENGE.1.40
MENGE.1.41
MENGE.2.37

计数器表示子订单,该字段用于。

问题是,这破坏了我的动态表单字段声明,我不明白为什么。我收到以下错误:
Diagnose: Element MENGE.1 is undefined in a CFML structure referenced as part of an expression.

问题:
谁能给我一个提示可能是什么问题?我是否还必须对 HTML 页面上的表单字段进行参数化(不应该)?

谢谢!

编辑 :
问题出在我的验证函数中,我还需要声明我在上面所做的修改。新函数如下所示:
<cffunction name="Validate" access="public" returntype="array" output="false" hint="validate form inputs and return an array of faulty field names.">
<cfscript>
var LOCAL = {};
var double = structNew();
double.form = VARIABLES.Instance.FormData;
double.criteria = VARIABLES.Instance.Validation;
</cfscript>

<!--- add dynamic form fields for validation... I FORGOT TO UPDATE THIS--->
<cfloop collection="#VARIABLES.Instance.FormData#" item="formField">
<cfscript>
if ( LEFT(formField, 5) EQ "MENGE"
OR LEFT(formField, 10) EQ 'BESTELLTYP'
OR LEFT(formField, 3) EQ "EAN"
OR LEFT(formField, 12) EQ "BESTELL_TEXT"
...
) {
VARIABLES.Instance.Validation[formField]="pass";
}
</cfscript>
</cfloop>
<!--- Get error names and type --->
<cfinvoke component="form_validate" method="validate_fields" double="#double#" returnvariable="validation_errors"></cfinvoke>
<cfset LOCAL.ErrorMessages = validation_errors />
<cfreturn LOCAL.ErrorMessages />



因为我没有在这个函数中添加新的更新 if 子句,所以我收到了错误。

最佳答案

要以 Dan Bracuk 的答案为基础,请使用下划线(尽管您需要更改“BESTELL_TEXT”的名称)。使用它与 listFirst、listGetAt 和 listLast 的组合来确定字段名称结构,使用下划线作为分隔符。请注意我是如何使用列表功能稍微清理您的大 IF 的。编写的此代码可能无法满足您的需求,但希望在不必了解您的业务需求的情况下说明这些概念。

<cfscript>
var orders=structNew();
item=listFirst(formField,'_');
orderNames = "MENGE,EAN,BESTELLTEXT,BESTELLTYPE";
if (listFindNoCase(orderNames,item,'_')){
if (!structKeyExists(orders,item)){
// initialize item
orders[item]=structNew();
}
orderID="";
subOrderId="";
if (listLen(formField,'_') gt 1) {
orderID=listGetAt(formField,2,'_');
}
if (listLen(formField,'_') eq 2) {
orders[item][orderId]=formData[formField];
}
if (listLen(formField,'_') eq 3) {
subOrderId=listLast(formField,'_');
orders[item][orderId][subOrderId]=formData[formField];
}

}
</cfscript>

关于forms - 如何在 Coldfusion CFC 中声明动态表单字段默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15050992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com