Возврат массива объектов Java в компонент Coldfusion - PullRequest
1 голос
/ 19 мая 2011

Создание объектов Java в Coldfusion довольно просто:

variable = CreateObject("JAVA", "java.object").init(JavaCast("primitiveType", cfVar));

Однако работать с типами возврата Java не так просто, если, скажем, метод Java возвращает список объектов Java.:

newVariable = variable.returnJavaObjectCollection();

Существует ли рекомендация для работы с объектами Java, возвращаемыми в массиве или ArrayCollection?

Ответы [ 2 ]

2 голосов
/ 21 мая 2011

Если мне кажется, что я правильно понимаю ваш вопрос (извините, вы не уверены на 100%) - вы должны иметь возможность вызывать методы для объектов Java в ColdFusion, как обычно в Java.

Например, вы можете вызывать методы для объекта java.lang.String при работе со строкой в ​​ColdFusion.

Так что в этом нет ничего плохого:

<cfscript>
myString = JavaCast("string", "FooBar"); //definitely a String object.
</cfscript>

<cfoutput>    
String length: #myString.length()#
Starts with 'Foo': #myString.startsWith("Foo")#
Upper case string: myString.toUpperCase()#
</cfoutput>

Если вы имеете дело с экземпляром java.util.List, вы обнаружите, что 9/10 раз функции встроенного массива ColdFusion будут отлично работать - поскольку ColdFusion Arrays фактически являются реализациями java.util.List. .

Так что все равно должен работать, ArrayAppend (), ArrayContains () и т. Д. Должны работать должным образом.

В противном случае у вас все еще есть доступ к базовому API для List: http://download.oracle.com/javase/6/docs/api/java/util/List.html

Но следует помнить, что все начинается с 0, а не с индекса 1.

Таким образом, получить первое значение в списке Java будет:

myItem = myList.get(0);

Вместо способа CF:

myItem = myList[1];

В противном случае, это действительно об этом.

Вы, вероятно, должны заметить, что при непосредственном вызове методов Java возникают небольшие издержки, как это делается на лету с использованием Reflection , поэтому, если вместо этого вы можете использовать встроенные функции CF, это обычно лучше , но что-то, что у вас нет другого выхода, кроме как взаимодействовать изначально.

Для получения дополнительной информации вы можете попробовать Документация ColdFusion Java

1 голос
/ 25 мая 2011

Если вы вернете Vector<Object>, он будет работать с утилитами массивов ColdFusion, а HashMap<String,Object> будет работать с утилитами Struct ColdFusion.Несколько замечаний:

нулевые объекты не определены в ColdFusion, поэтому, если элемент в массиве равен нулю, или значение на карте равно нулю, или вы просто возвращаете пустое значение, их соответствующие переменные будут неопределенными.

Имейте в виду, что вы все равно можете вызывать java-методы для сложных java-объектов в ColdFusion - включая методы для сложных коллекций, кроме Векторов и Карт.Например:

<cfset iterator = myJavaObj.myJavaFuncReturnsCollection().iterator() />
<cfloop condition="iterator.hasNext()">
    <cfset currObj = iterator.next() />
    <cfset currObj.myFunction() />
</cfloop>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...