cfquery会在每个页面加载时执行吗?我这样问是因为我要从查询中获得一个序列号,然后在表单中使用它。不幸的是,该查询似乎会在每次页面加载时执行。我不希望这样的事情发生。我还尝试将它放在一个函数中,然后从使用序列号的cfinput框的onSubmit参数中调用它,但它仍然调用这个序列。
下面是我尝试过的一些例子:
<cfquery name="payment_seq_num" datasource="ORCL">
select ratner01.payment_id_seq.nextval as seq from dual
</cfquery>
<cfset paymentid = payment_seq_num.seq>和
<cffunction name="getVetSeq" output="false">
<cfquery name="vet_seq_num" datasource="ORCL">
select ratner01.vet_id_seq.nextval as seq from dual
</cfquery>
<cfset vet_form.VET_ID = vet_seq_num.seq>
</cffunction>我明白为什么第一个函数一直在递增……它在头脑中,每次都会被调用。但是为什么第二个要执行每个页面加载呢?
我是这样称呼它的:
<cfform action="vet_output.cfm" method="post" format="html" class="cfform" name="vet_form">
<fieldset>
<legend>Add a Veterinarian to the Databse</legend>
<table>
<tr><cfoutput>
<td><cfinput type="hidden" name="VET_ID" onsubmit="#getVetSeq()#"></td></cfoutput>
</tr>
<tr>
<td>Vet First Name:<br/> <cfinput type="text" name="VET_FNAME" maxlength="35"></td>
<td>Vet Last name: <br/><cfinput type="text" name="VET_LNAME" maxlength="50"></td>
</tr>
<td><cfinput type="submit" value="Insert" name="vetSubmit"></td>
</table>
</fieldset>
</cfform>因此,我将此代码添加到输出页面中,并从输入页面中删除了所有相关代码,这要归功于一些建议,并且它起作用了……:
<cfquery name="vet_seq_num" datasource="ORCL">
select ratner01.vet_id_seq.nextval as seq from dual
</cfquery>
<cfset FORM.VET_ID = vet_seq_num.seq>
<cfinsert name="insert_vet" datasource="ORCL" username="XX" password="XX"
tablename="VET"
formfields="VET_ID, VET_FNAME, VET_LNAME">发布于 2011-12-03 05:17:41
是的,所以每次加载这个页面时,你都会调用那个函数,并获得一个新的序列号。因为每次加载页面时,ColdFusion都会执行#getVetSeq()#。
我知道你把它放在onSubmit()中,但是onSubmit()是一个JavaScript事件,它不知道ColdFusion。当JavaScript看到代码时,函数已经被调用了。如果您查看一下,您可能会看到JS错误,因为当您单击submit时,您实际上是在调用一个不存在的函数。因为您的代码呈现为类似以下内容:
onsubmit="1234"如果你只想在表单提交时调用它,那么在你的output.cfm中而不是表单中调用它。
如果出于某种原因,您需要在此页面而不是在处理页面中执行此操作,则需要将其视为Ajax调用,以便它只执行onSubmit()。
发布于 2011-12-04 03:05:50
通过method="POST"提交的表单值在名为FORM的系统结构中可用。无论分配给您的<form>的名称是什么,它始终被称为FORM。所以正确的变量名是:
FORM.VET_ID但是,不从函数内部访问FORM作用域会更干净。只需让函数生成并返回新的ID,剩下的工作就交给调用页面来完成。这使得功能更具模块化/可重用性。但是要记住在作用域中使用所有函数的局部变量(对于ColdFusion 9+,使用Local作用域)
<!--- Usage --->
<cfset FORM.VET_ID = generateNewVetID()>
<!--- Function --->
<cffunction name="generateNewVetID" output="false" returnType="numeric">
<cfset var vet_seq_num = "">
<cfquery name="vet_seq_num" datasource="ORCL">
SELECT ratner01.vet_id_seq.nextval AS seq
FROM dual
</cfquery>
<cfreturn vet_seq_num.seq>
</cffunction>https://stackoverflow.com/questions/8362482
复制相似问题