Coldfusion 8 - SerializeJSON не сериализуется - PullRequest
0 голосов
/ 10 ноября 2011

Я разрабатывал сайт в автономном режиме на установке WAMP и сериализировал бины с использованием функции SerializeJSON, например:

propertyImageBean = CreateObject("component","cfcs.beans.property_image").init();
propertyImageBean.setname("test");
propertyImageBean.setalt("test alt");

<cfoutput>#SerializeJSON(propertyImageBean)#</cfoutput>

Это все работает правильно, и приведенный выше код выдает:

{"name":"test","alt":"asdasd","id":""}

Однако, когда я загружаю свои файлы на действующий сайт, ответом является просто пустой объект:

{}

Локальная версия работает на CF9, а версия prod на CF8, так что, вероятно, проблема в этом.

Есть идеи?

Спасибо

EDIT:

<cfscript>

    propertyImageBean = CreateObject("component","cfcs.beans.property_image").init();
    propertyImageBean.setid(1);
    propertyImageBean.setname("test");
    propertyImageBean.setalt("asdasd");

</cfscript>
<cfdump var=#propertyImageBean#>
<cfoutput>id: #propertyImageBean.getid()#</cfoutput>
<cfoutput>alt: #propertyImageBean.getalt()#</cfoutput>
<cfoutput>name: #propertyImageBean.getname()#</cfoutput>

Выходы (сервер prod (:

  • Дамп компонента, но не отображает свойства компонента в дампе, тогда как на локальном сервере это

    id: 1 alt: asdasd name: test

Таким образом, похоже, что это проблема с компонентом, если только на сервере нет проблем с конфигурацией.

CFC:

<!--- PROPERTIES FOR DOCUMENTATION PURPOSES ONLY --->
<cfproperty name="id" displayname="id" hint="id of the property_image" type="any" required="True" />
<cfproperty name="name" displayname="name" hint="name of the property_image" type="any" required="True" />
<cfproperty name="alt" displayname="alt" hint="alt of the property_image" type="any" required="True" />

<!--- PSEUDO-CONSTRUCTOR: SETS DEFAULT VALUES IF INIT METHOD IS NOT CALLED --->
<cfscript>
    variables.id = "";
    variables.name = "";
    variables.alt = "";
</cfscript>

<!--- CONSTRUCTOR: TAKES IN ARGUMENTS AND CALLS SETTER (MUTATOR) FOR EACH ATTRIBUTE OF THE BEAN --->
<cffunction name="init" displayname="Init" hint="Constructor for the CFC" access="public" output="false" returntype="any">
    <!--- ARGUMENTS FOR THE CONSTRUCTOR, ALL OF WHICH ARE OPTIONAL (NO-ARG CONSTRUCTOR) --->
    <cfargument name="aid" displayname="id" hint="id of the property_image" type="any" required="false" default="" />
    <cfargument name="aname" displayname="name" hint="name of the property_image" type="any" required="false" default="" />
    <cfargument name="aalt" displayname="alt" hint="alt of the property_image" type="any" required="false" default="" />
    <!--- CALL THE SETTERS (MUTATORS) FOR EACH OF THE property_image ATTRIBUTES AND PASS IN THE ARGUMENTS --->
    <cfscript>
        setid(arguments.aid);
        setname(arguments.aname);
        setalt(arguments.aalt);
    </cfscript>

    <cfreturn this />
</cffunction>

<!--- GETTERS AND SETTERS (MUTATORS AND ACCESSORS) --->
<cffunction name="getid" access="public" output="false" returntype="string">
    <cfreturn variables.id />
</cffunction>
<cffunction name="setid" access="public" output="false" returntype="void">
    <cfargument name="aid" type="string" required="true" />
    <cfset variables.id = arguments.aid />
</cffunction>
<cffunction name="getname" access="public" output="false" returntype="string">
    <cfreturn variables.name />
</cffunction>
<cffunction name="setname" access="public" output="false" returntype="void">
    <cfargument name="aname" type="string" required="true" />
    <cfset variables.name = arguments.aname />
</cffunction>
<cffunction name="getalt" access="public" output="false" returntype="string">
    <cfreturn variables.alt />
</cffunction>
<cffunction name="setalt" access="public" output="false" returntype="void">
    <cfargument name="aalt" type="string" required="true" />
    <cfset variables.alt = arguments.aalt />
</cffunction>

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Сначала настройте CF8 локально. http://www.adobe.com/support/coldfusion/downloads.html#cf8proddl

Я думаю, SerializeJSON(cfc) - это что-то новое в CF9, которого нет в CF8. Это не официальная, документированная особенность SerializeJSON Я не верю.

Реализуйте функцию getMemento(), которая возвращает переменные в виде структуры, тогда вы можете SerializeJSON для этой структуры.

/** a public function in Obj.CFC */
function getMemento()
{
    return {
        x=variables.x,
        y=variables.y
    };
}

// outside of the cfc...
obj = createComponent("component","Obj").init();
objJson = serializeJSON(obj.getMemento());
1 голос
/ 10 ноября 2011

Я бы проверил, если это проблема с serializeJson () или с методами CFC.Убедитесь, что значения действительно установлены: возвращают ли getName () и getAlt () то, что вы ожидаете?

Есть ли вероятность того, что в производственной среде возникнет проблема с неожиданными одновременными запросами?- инициирование этого экземпляра CFC?

Можете ли вы создать полностью автономный CFM и CFC, которые оба уменьшены до абсолютного минимального количества «движущихся частей», чтобы продемонстрировать эту проблему, и при этом повторить их на обоих устройствах?& prod?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...