سؤال

لدي 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 "متغير غير موجود 'خطأ.

نصائح أخرى

في 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) />

أيضًا، تحقق جيدًا من بقية ملف application.cfc للتأكد من صحته لأن شيئًا ما لا يعمل بشكل صحيح، حيث كان من المفترض أن ترى هذا الخطأ المتمثل في عدم تمكنه من العثور على المكون cfc.UserGateway.

يحرر:لقد نسيت أيضًا أن أذكر أن onApplicationStart لا يحتاج إلى إرجاع أي شيء.يجب أن يكون نوع الإرجاع فارغًا ولا <return this/> يجب أن يكون حاضرا.

ويمكن أن يكون هذا:

<وأ href = "http://kathylynnward.wordpress.com/2008/04/14/lyra-captcha-error-element-captcha-is-undefined-in-a-java-object-of-type- الطبقة ljavalangstring / "يختلط =" نوفولو noreferrer "> http://kathylynnward.wordpress.com/2008/04/14/lyra-captcha-error-element-captcha-is-undefined-in-a-java-object- من من نوع الطبقة ljavalangstring /

و(أنا بلورة آخر إذا كان هذا هو المشكلة)

وإعادة تشغيل خدمة CF الخاص بك قد تساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top