Coldfusion组件: - 传递给函数的参数不是numeric类型

时间:2010-04-27 05:31:01

标签: coldfusion components

我有一个简单的表格

form.cfm: -

 <cfset Registr = createObject("component", "forms.Registr") /> 
 <cfset setFoo = createObject('component','forms.Registr).putNUsr(username,password,rating) />

    <form name="regFrm"  action="#cgi.script_name#" method="post" onsubmit="submitform();" >
      <tr><td>Username:</td>

    <td><input  type="text" name=" Username" value="#form. Username#" ></td></tr>


        <tr><td>Password:</td>
    <td><input class="" type="password" name="password" value="#form.password#" ></td></tr>     

        <tr><td>Rate:</td>

                <select name="rating" >
                    <option value="" ></option>
                    <cfloop query="qGetReting">
                        <option value="#rating_id#" <cfif form. rating eq prof_id>selected</cfif> >#rating#</option>
                    </cfloop>
                </select>
            </td>
        </tr>
    </form>

现在在“forms”文件夹中有一个名为Registr.cfc的cfc,它有一个名为'putNUsr'的插入函数,用于'Registr.cfc'代码如下。

<cfcomponent>
<cffunction name="putNUsr" returntype="void" displayname="" output="no">
        <cfargument name="password" type="string" required="true">
        <cfargument name="rating" type="numeric" required="true">        
        <cfargument name="username" type="string" required="true">    
            <cfquery datasource="#application.xyz#" name="q_putNUsr">
                insert into 
           users (username
                , password
                , rating)

                 values(                

            <cfqueryparam value="#arguments. username#" cfsqltype="CF_SQL_VARCHAR" />,          
            <cfqueryparam value="#arguments.password#" cfsqltype="CF_SQL_VARCHAR" />,
            <cfqueryparam value="#arguments.rating#" cfsqltype="CF_SQL_INTEGER"  )

                    </cfquery>
</cffunction>
 </cfcomponent>

如果我不使用表单字段“rating”,我可以使用数据填充数据库 是数字。 否则我得到的错误如下: -

The RATING argument passed to the putNUsr function is not of type numeric. 
If the component name is specified as a type of this argument, it is possible that either a definition file for the component cannot be found or is not accessible.

麻烦 救命 -S Vali

4 个答案:

答案 0 :(得分:4)

您已将功能中的参数顺序定义为密码,评级,用户名,但是您将用户名,密码,评级的顺序传递给他们。

你可以使用ColdFusion选项作为命名参数传递参数,例如putNUsr(username ='me',password ='letmein',rating = 5)。执行此操作时,您可以按任意顺序传递它们

答案 1 :(得分:2)

Gary已经发现了你的错误。关于评级的另一个问题是你可以将它包装在Val()函数中,这将为你提供一个空字符串为0 ...

答案 2 :(得分:1)

您的评级选择的默认(第一个)选项将空字符串传递给putNUsr组件。空字符串不是数字,因此无法进行类型验证。

您必须在putNUsr组件中添加一些额外的逻辑来解决这个问题,或者只是将表单中的默认评级选项设置为0(作为示例)。

答案 3 :(得分:0)

我在代码中发现了同样的问题。当我将参数'Password'替换为'PasswordVal'等其他名称时,它就解决了。出于某种原因,Coldfusion不会读取名为“密码”的参数并抛出错误。如果您通过其他名称更改密码名称,则代码将开始工作。