ColdFusion 组件不返回查询
ColdFusion Component Not Returning Query
我断断续续地尝试了大约 6 个月左右的时间来弄清楚 CFC,但始终无法弄清楚。所以现在我有 SQL 和 LDAP 查询分散在不同的页面中,我想将它们合并到一个组件中。下面的查询在它自己的 CF 页面中工作,(我省略了 post 的一些查询详细信息)但我得到的是空白页面而不是任何结果。这是我的 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 时,它会把床弄得乱七八糟。与所有关于此的文档一样,有很多不同的方法可以做到这一点,但我没有尝试过,所以我希望我能在正确的方向上得到推动。
您的 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)>
查看您调用 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)>
我断断续续地尝试了大约 6 个月左右的时间来弄清楚 CFC,但始终无法弄清楚。所以现在我有 SQL 和 LDAP 查询分散在不同的页面中,我想将它们合并到一个组件中。下面的查询在它自己的 CF 页面中工作,(我省略了 post 的一些查询详细信息)但我得到的是空白页面而不是任何结果。这是我的 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 时,它会把床弄得乱七八糟。与所有关于此的文档一样,有很多不同的方法可以做到这一点,但我没有尝试过,所以我希望我能在正确的方向上得到推动。
您的 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)>
查看您调用 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)>