2013-07-20 1 views
3

Я работаю над приложением, основанным на Railo4, и у меня возникает интересная проблема. Я не делаю ничего нового здесь, пока идет код ColdFusion. просто беря некоторые строки, конкатенируя там, где это необходимо, и возвращаю строку.Проблема конкатенации строк с Railo4

<cffunction name="customBuildURL" access="public" returntype="string"> 

    <cfargument name="subsystem" type="string" required="true" /> 
    <cfargument name="section" type="string" required="true" /> 
    <cfargument name="item" type="string" required="true" /> 
    <cfargument name="args" type="string" required="true" /> 

    <cfset var url = "index.cfm?action=" & ARGUMENTS.subsystem & ":" & ARGUMENTS.section /> 

    <cfif Ucase(ARGUMENTS.item) NEQ "DEFAULT" > 
     <cfset url &= "." & ARGUMENTS.item /> 
    </cfif> 

    <cfif ARGUMENTS.args NEQ "" > 
     <cfset url &= ARGUMENTS.args /> 
    </cfif> 

    <cfreturn url /> 

</cffunction> 

Однако у меня возникают две необычные ошибки.

1) Первое: Can't cast Complex Object Type Struct to String и сообщается по следующим двум направлениям:

<cfset url &= "." & ARGUMENTS.item /> 

<cfset url &= ARGUMENTS.args /> 

2) Во-вторых, the function customBuildURL has an invalid return value , can't cast Object type [url] to a value of type [string] при возврате переменной url.

Как вы можете видеть, я не делаю ничего сложного здесь. Просто установите несколько строк, объедините их, а затем верните. Я не вижу, где создается «Объект» и создается как строка. Я дважды проверил использование оператора &=, и это не кажется проблемой, потому что если я делаю url = url & "." & ARGUMENTS.item, то сообщается об этой же ошибке.

Любые идеи?

+1

Что произойдет, если вы используете переменную, отличную от URL? Я предполагаю, что он все еще тянет в структуре URL. –

+0

Это исправлено! Хотелось бы, чтобы вы отправили это как ответ, я мог бы дать вам за это честь. Я уставился на это часами, но не понял, что совершил ошибку newb. Область URL противоречила моей переменной! D'OH! В любом случае, переменная 'url' изменилась на' actionURL', и теперь все работает! Спасибо Мэтту! Иногда вам нужен дополнительный набор глаз, когда вы слишком долго смотрели на него. –

+0

Нет проблем. Я написал это как ответ. –

ответ

3

Url является зарезервированным словом в ColdFusion, поэтому, даже если вы меняете его в функции, он все еще набирает фактическую структуру переменных URL.

Вот полный список reserved words в ColdFusion

+0

Являются ли зарезервированные слова в Railo такими же, как ACF? не то, что 'var url' используется внутри функции –

4

Sly,

Railo не позволяет использовать какие-либо возможности в качестве переменной внутри функции. Это преднамеренная несовместимость, так как Coldfusion позволяет это. Но после этого вы больше не сможете получить доступ к области URL. Вот почему мы этого не допускаем. Просто вызовите переменную sUrl, например.

НТН

Герт Franz Railo ООО.

+1

Просто в стороне: Герт является генеральным директором Railo (http://www.getrailo.com/index.cfm/about-us/railo-team/gert-franz /) –

+0

Спасибо за разъяснение Герт! Я ценю последующие действия. Это была глупая ошибка с моей стороны. Во все мои дни программирования CF я ВСЕГДА старался держаться подальше от имен переменных, которые совпадают с переменными области видимости, но в этом одном экземпляре я быстро прототипировал что-то и сделал то, что я не должен был делать. В любом случае, спасибо за разъяснение. Вы очень помогли, особенно для организации, к которой я принадлежу. ;) –