문제

다음 Applicaton.cfc가 있습니다

<cffunction name="onApplicationStart" access="public" returntype="Object">
 <cfset application.dsn = "myDB" />
 <cfset application.userGateway = createObject("component","cfc.UserGateway").init(dsn = application.dsn) />
 <cfreturn this />
</cffunction>

이것은 내 구성 요소 Usergateway.cfc입니다

<cfcomponent name="UserGateway" hint="Data Access Object" output="false">
 <cffunction name="init" access="public" hint="constructor" output="false" returntype="UserGateway">
  <cfargument name="dsn" type="string" required="true" hint="datasource" />
   <cfset variables.dsn = arguments.dsn />
 <cfreturn this />
 </cffunction>

 <cffunction name="getUsers" access="public" output="false" returntype="query">
  <cfargument name="id" type="String" default="" />
  <cfargument name="name" type="String" default="" />
  <cfargument name="district" type="String" default="" />
  <cfset var qQuery = "" />
  <cfquery name="qQuery" datasource="#variables.dsn#">
    SELECT *
    FROM A INNER JOIN B
    ON A.X = B.Y
    WHERE 0=0
    <cfif "#arguments.id#" neq "">
     AND B.X LIKE '%#arguments.id#%'
    </cfif>
    <cfif "#arguments.name#" neq "">
     AND (A.I LIKE '#arguments.name#%'
      OR A.J LIKE '#arguments.name#%')
    </cfif>
    <cfif "#arguments.district#" neq "">
     AND A.O LIKE '%#arguments.district#%'
    </cfif>
  </cfquery>
  <cfreturn qQuery />
 </cffunction>
</cfcomponent>

그리고 이것은 내 동일합니다 .cfm

<cfform action="same.cfm" method="post" preservedata="true">
 <p>ID: <cfinput type="text" name="id" size="20" maxlength="4" /></p>
 <p>Name: <cfinput type="text" name="name" size="20" maxlength="64" /></p>
 <p>District: <cfinput type="text" name="district" size="20" maxlength="3" /></p>
 <p><cfinput class="button" type="submit" name="submit" value="OK" /></p>
</cfform>

<cfif IsDefined("form.submit")>
 <table>
  <cfset qQuery = application.userGateway.getUsers(id = form.id, name = form.name, district = form.district) />
  <cfoutput query="qQuery">
   <tr>
    <td>#qQuery.currentRow#.</a></td>
    <td>#qQuery.I#</a></td>
    <td>#qQuery.M#, #qQuery.N#</a></td>
    <td>#qQuery.D#</a></td>
   </tr>
  </cfoutput>
 </table>
</cfif>

다음 오류가 발생합니다.

Element USERGATEWAY is undefined in a Java object of type class [Ljava.lang.String;.
The error occurred in same.cfm: line 10

내가 무엇을 놓치고 있습니까?

-------------------------------------------
-------------------------------------------

내가 이런 식으로 할 때 그것은 작동합니다. 내가 초보자로서 얻지 못하는 것은 사소한 일이어야합니다.

application.cfc

<cffunction name="onRequestStart" access="public" returntype="String">
 <cfset request.dsn="myDB" />
</cffunction>

동일 .cfm

    <cfset userGateway = createObject("component","cfc.UserGateway").init(dsn = request.dsn) />
    <cfset qGetUser = userGateway.getUsers(id = form.personid, name = form.name, district = form.district) />
  <cfoutput query="qQuery">
   <tr>
    <td>#qQuery.currentRow#.</a></td>
    <td>#qQuery.I#</a></td>
    <td>#qQuery.M#, #qQuery.N#</a></td>
    <td>#qQuery.D#</a></td>
   </tr>
  </cfoutput>
도움이 되었습니까?

해결책

여기에는 내가 잘못 본 두 가지가 있습니다.

첫째, 내 이해에 따르면, Application.cfc의 '이'범위를 사용하는 것은 당신이 시도하는 방식으로 작동하지 않습니다. UserGateway 객체를 응용 프로그램 범위 값으로 설정하면 전 세계적으로 사용 가능 해지고 실제로 OnApplicationStart에서 반환 할 수 없습니다. application.cfc에서 returnType를 부울로 변경하고 진정으로 돌아갑니다. 그것은 당신의 문제를 해결해야합니다.

둘째, 쿼리에서 귀하의 인수와 조건부가 실제로 가지고있는 것의 프록시가 아닌 경우, 당신은 당신의 기능에 존재하지 않는 'personid'를 참조하고 있습니다. 응용 프로그램 범위에서 객체 호출을 통해 해당 쿼리를 호출 할 때 CF 친화적 인 '변수가 존재하지 않는'오류와 달리 Java 문자열 오류가 오류로 반환되는 것을 보았습니다.

다른 팁

same.cfm에서 이것을 실행하십시오.

<cfset OnApplicationStart()>

그런 다음 페이지를 다시 새로 고치십시오. 이제 작동합니까?

<cffunction name="init" access="public" hint="constructor" output="false" returntype="UserGateway">

해야한다:

<cffunction name="init" access="public" hint="constructor" output="false" returntype="Any">

다음 줄이 잘못되었습니다.

<cfset application.userGateway = createObject("component","cfc.UserGateway").init(dsn = application.dsn) />

"CFC"와 함께 읽어야합니다. 원하는 구성 요소 이름의 시작 부분에서 다음과 같습니다.

<cfset application.userGateway = createObject("component","UserGateway").init(dsn = application.dsn) />

또한 구성 요소 CFC.usergateway를 찾을 수 없다는 오류를 보았을 때 무언가가 제대로 작동하지 않기 때문에 Application.cfc의 나머지 부분을 두 번 확인하십시오.

편집하다:또한 OnApplicationStart가 아무것도 반환 할 필요가 없다는 것을 언급하는 것을 잊었습니다. 반환 유형은 무효이며 아니요 <return this/> 존재해야합니다.

이것이 될 수 있습니다 :

http://kathylynnward.wordpress.com/2008/04/14/lyra-captcha-error-element-captcha-is-undefined-a-java-obja- oblect-type-class-ljavalangstring/

(이것이 문제라면 게시물을 자세히 설명하겠습니다)

CF 서비스를 다시 시작하면 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top