首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ColdFusion 2018 Bean-DAO-Manager OOP逻辑错误

ColdFusion 2018 Bean-DAO-Manager OOP逻辑错误
EN

Stack Overflow用户
提问于 2020-03-28 01:46:41
回答 1查看 85关注 0票数 0

我正在尝试通过重新创建一个经过验证的Bean-DAO-Manager设置来学习ColdFusion中的OOP。在本例中,我只使用了Create,但对于Read、Update和Delete也存在这个问题。我想我在传递参数时犯了一些错误。在index.cfc中,我从testBeanDaoManager.cfc中创建了一个对象,该对象包含应用程序接口。在这里,创建了应该保存属性的bean。从那里调用管理器,它调用文件testDAO.cfc中的db-query。

该错误指出没有找到bean的方法getName() (在post的末尾提供了更多详细信息)。

任何帮助都是非常感谢的。

数据库和表: testBeanDao.APP.TESTBEAN

文件: /index.cfm、/api/testBeanDaoManager.cfc、/logic/bean/testBean.cfc、/logic/dao/testDAO.cfc、/logic/manager/testManager.cfc

代码语言:javascript
复制
/index.cfm:
<cfscript>
    obj = createObject("component","api.testBeanDaoManager"); 
    add = invoke(obj,"addName", {ID=0, Name="Meo"}); 
</cfscript> 
代码语言:javascript
复制
/api/testBeanDaoManager.cfc
component rest=true restpath="names" {
    remote any function gettestBean(ID){ 
        var nameManager = createObject('component', 'logic.manager.testManager');
        var nameBean = nameManager.getName(arguments.ID);
        return nameBean;
    }

  remote any function addName(numeric ID, string Name, restArgSource="path", any Data = {})  httpmethod="post" restpath="add/{id}" {
    var bean = gettestBean(arguments.ID);
    var nameManager = createObject('component', 'logic.manager.testManager');
    bean.setName(arguments.Name); 
    bean = nameManager.addName(bean);
    return bean;
  }
}
代码语言:javascript
复制
/logic/manager/testManager.cfc
<cfcomponent output="false" >

    <cffunction name="init" output="false" access="public" returntype="testManager">
        <cfset super.init(  gateway=createObject("component","logic.gateway.testGateway").init(),                                                   DAO=createObject("component","logic.dao.testDAO").init()) 
        />
        <cfreturn this />
    </cffunction>

    /**
     * Initializing Bean
     */
    <cffunction name="gettestBean" output="false" returntype="any">
        <cfset var bean = createObject("component","logic.bean.testBean") />
        <cfreturn bean />
    </cffunction>

<cffunction name="addName" output="false" returntype="any">
  <cfargument name="bean" required="true" />
  <cfset var dao = createObject("component","logic.dao.testDAO") />
  <cfset dao.insertName(bean) />

  <cfreturn bean />
</cffunction>
...
代码语言:javascript
复制
/logic/dao/testDAO.cfc
<cffunction name="insertName" returntype="any" output="false">
  <cfargument name="bean" type="any" required="true" />
  <cfquery name="local.result" datasource="testBeanDao" >
    INSERT INTO app.testBean (
        Name
    )
    VALUES (                     
        <cfqueryparam value="#arguments.bean.getName()#" cfsqltype="cf_sql_varchar">
        )
  </cfquery>
  <cfreturn local.result />
</cffunction>
代码语言:javascript
复制
/logic/bean/testBean.cfc
<cfcomponent displayname="testBean" output="false">

  <cffunction name="init" access="public" output="false" returntype="testBean">
      <cfset super.init() />
      <cfset variables.instance.ID = 0 />
      <cfset variables.instance.Name = arguments.Name />

      <cfreturn this />
  </cffunction>

  <cffunction name="load" access="public" returntype="any" output="false">
      <cfargument name="ID" type="numeric" required="true"/>
      <cfargument name="Name" type="string" required="true"/>

      <cfset setID(arguments.ID) />
      <cfset setName(arguments.Name) />

      <cfreturn this />
  </cffunction>

  <cffunction name="setName" returntype="void" access="public" output="false">
      <cfargument name="Name" type="string">
      <cfset variables.instance.Name = arguments.Name />
  </cffunction>

  <cffunction name="getName" returntype="string" access="public" output="true">
      <cfreturn variables.instance.Name />
  </cffunction>

  <cffunction name="setID" returntype="void" access="public" output="false">
      <cfargument name="ID" type="numeric" required="true" />
      <cfset variables.instance.ID = arguments.ID />
  </cffunction>

  <cffunction name="getID" returntype="numeric" access="public" output="true">
      <cfreturn variables.instance.ID />
  </cffunction>

</cfcomponent>

错误消息:

代码语言:javascript
复制
The web site you are accessing has experienced an unexpected error.
Please contact the website administrator.

The following information is meant for the website developer for debugging purposes.
Error Occurred While Processing Request
The getName method was not found.
Either there are no methods with the specified method name and argument types or the getName method is overloaded with argument types that ColdFusion cannot decipher reliably. ColdFusion found 0 methods that match the provided arguments. If this is a Java object and you verified that the method exists, use the javacast function to reduce ambiguity.

The error occurred in C:/programs/cfusion/wwwroot/cfproject/logic/dao/testDAO.cfc: line 35
Called from C:/programs/cfusion/wwwroot/cfproject/logic/manager/testManager.cfc: line 45
Called from C:/programs/cfusion/wwwroot/cfproject/api/testBeanDaoManager.cfc: line 53
Called from C:/programs/cfusion/wwwroot/cfproject/index.cfm: line 85
33 :            )
34 :            VALUES (                     
35 :                    <cfqueryparam value="#arguments.bean.getName()#" cfsqltype="cf_sql_varchar">
36 :                    )
37 :        </cfquery>
EN

回答 1

Stack Overflow用户

发布于 2020-03-29 20:05:35

(评论太长了)

你在打电话给我

代码语言:javascript
复制
var bean = gettestBean(arguments.ID);

指向/api/testBeanDaoManager.cfcgettestBean。这个可以

代码语言:javascript
复制
var nameManager = createObject('component', 'logic.manager.testManager');
var nameBean = nameManager.getName(arguments.ID);
return nameBean;

但是logic.manager.testManager没有任何getName函数。即使它有一个实例,您也必须返回一个实例( bean),对于名为getName的方法来说,这有点误导。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60891432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档