1

次の 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>

そして、これは私のsame.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

私は何が欠けていますか?

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

このようにするとうまくいきます。初心者の私にはわからない些細なことに違いありません。

アプリケーション.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>
4

6 に答える 6

2

ここで間違っていることが 2 つあります。

まず、私の理解では、application.cfc で「this」スコープを使用しても、意図したとおりに動作しません。userGateway オブジェクトをアプリケーション スコープの値に設定すると、グローバルに使用できるようになり、onApplicationStart で返す必要がなくなります。application.cfc で、returntype を boolean に変更し、true を返すだけです。それはあなたの問題を解決するはずです。

次に、クエリで引数と条件が実際に持っているもののプロキシでない場合、関数に存在しない引数「personid」を参照しています。アプリケーションスコープでオブジェクト呼び出しを介してそのクエリを呼び出すと、CF Friendly の「変数が存在しません」エラーではなく、Java 文字列エラーがエラーとして返されるのを見たことがあります。

于 2009-06-18T04:42:03.180 に答える
0

same.cfmで、これを実行します。

<cfset OnApplicationStart()>

次に、ページをもう一度更新します。今は動作しますか?

于 2009-06-16T12:09:47.173 に答える
0
<cffunction name="init" access="public" hint="constructor" output="false" returntype="UserGateway">

する必要があります:

<cffunction name="init" access="public" hint="constructor" output="false" returntype="Any">
于 2009-06-16T12:14:27.947 に答える
0

CF サービスを再起動すると役立つ場合があります。

于 2009-06-16T18:42:43.353 に答える
0

次の行は正しくありません。

<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 は何も返す必要がないことにも言及するのを忘れていました。戻り値の型は void である必要があり、存在<return this/>する必要はありません。

于 2009-06-16T13:52:46.547 に答える
0

これでしょうか:

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

(これが問題である場合は、投稿を詳しく説明します)

于 2009-06-16T18:07:53.940 に答える