ColdFusion组件不返回查询

时间:2015-05-29 22:09:30

标签: coldfusion cfc

我已经尝试过,大约6个月左右才能找出CFC,但从来没有得到它。所以现在我将SQL和LDAP查询分散在不同的页面中,我想将它们整合到一个组件中。下面的查询在它自己的CF页面中工作,(我已经省略了帖子的一些查询细节)但是我得到一个空白页而不是任何结果。这是我的queries.cfc:

<cfcomponent>    
    <cffunction name="EmployeeQuery" access="public" returntype="query">    
       <cfargument name="EmployeeID" required="yes" type="string"> 

       <cfldap action = "query" 
             name = "EmployeeAdd"
             attributes = "distinguishedName, displayName"
             filter = "sAMAccountName=#Arguments.EmployeeID#" 
             start = ""        
             scope="SUBTREE"
             maxrows="1"
             server = ""
             username=""
             password=""
             separator=";" />    
       <cfreturn EmployeeAdd>    
    </cffunction>
</cfcomponent>

我有一个简单的输入表单,我输入文本,点击提交,然后在我的操作页面上:

<cfif IsDefined("form.btnEmployeeAdd")>    
    <cfinvoke component="queries" 
         method="EmployeeQuery" 
         cfinvokeargument  
         name="EmployeeID" 
         value="#form.txtEmployeeID#">
    <h3>Confirm Employee Entered</h3>
    <cfoutput>#EmployeeAdd.displayName#</cfoutput>
</cfif>

我的结果是一个空白页面,我甚至没有得到h3文本。如上所述,所有这些在.cfm页面中都可以正常工作,但是当我尝试将它放在.cfc中时它会瘫痪。和所有关于此的文档一样,有很多不同的方法可以做到这一点,但是我没有尝试过任何工作,所以我希望能够朝着正确的方向努力。

2 个答案:

答案 0 :(得分:2)

您的cfinvoke缺少returnVariable

<cfinvoke component="queries" method="EmployeeQuery" returnVariable="EmployeeAdd">
  <cfinvokeargument  name="EmployeeID" value="#form.txtEmployeeID#">
</cfinvoke>
<h3>Confirm Employee Entered</h3>
<cfoutput>#EmployeeAdd.displayName#</cfoutput>

或者,如果您使用CF10或更高版本,则可以执行此操作而不是cfinvoke

<cfset employeeAdd = new queries().EmployeeQuery(form.txtEmployeeID)>

答案 1 :(得分:2)

查看您的代码以调用cfc方法,您似乎是以错误的方式执行此操作。您已在cfinvokeargument内添加cfinvoke作为属性。应将cfinvokeargument添加到cfinvoke正文中。并且正如@matt建议您需要将returnvariable属性添加到cfinvoke以获取从该方法返回的结果。像这样。

<cfinvoke component="queries" method="EmployeeQuery" returnVariable="EmployeeAdd">
     <cfinvokeargument  name="EmployeeID" value="#form.txtEmployeeID#">
</cfinvoke>

同样如@matt建议的那样,如果您使用cf10或更高版本,则可以使用new来实例化cfc,然后使用.表示法调用该方法。像这样。

<cfset employeeAdd = new queries().EmployeeQuery(form.txtEmployeeID)>