2009-06-24 3 views
2

Выполняют ли пользовательские теги с сопоставлениями? Я пытаюсь не обращаться к папке CustomTags как относительный адрес.Пользовательские теги и cfimport

Я пробовал:

<cfset this.mappings["/CT"] = Expandpath("/myProjects/Project1/CustomTags")> 

внутри Application.cfc, а затем

<cfimport prefix="tag" taglib="/CT"> 

внутри моей страницы, но это не так.

Он говорит:

Невозможно импортировать библиотеку тегов, указанный/КТ. Произошла следующая ошибка: C: \ Inetpub \ wwwroot \ CT. Убедитесь, что вы указали правильную библиотеку тегов.

ответ

1

В документах указано, что он работает с каталогом, указанным на странице сопоставления администратора ColdFusion. Вы пытались установить сопоставление в администраторе ColdFusion, чтобы убедиться, что это работает в первую очередь? Если это работает, но this.mappings, установленное для приложения в приложении application.cfc, не работает, возможно, это ошибка?!?

EDIT: Я тестировал предложение Адама использовать функцию expandPath(), но это также не работает, так как атрибут TagLib должен содержать постоянную величину. Он не может содержать переменную или функцию. Он просто не работает, если вы не используете набор сопоставлений в ColdFusion Administrator. Я попробовал следующие тесты, используя этот application.cfc.

<cfcomponent> 

    <cfset this.name = "TestApp" /> 
    <cfset this.loginStorage = "session" /> 
    <cfset this.sessionManagement = true /> 
    <cfset this.setClientCookies = true /> 
    <cfset this.setDomainCookies = false /> 
    <cfset this.sessionTimeOut = CreateTimeSpan(0,12,0,0) /> 
    <cfset this.applicationTimeOut = CreateTimeSpan(1,0,0,0) /> 
    <cfset this.mappings['/CT'] = "C:\apache\htdocs\myProjects\Project1\CustomTags"/> 

</cfcomponent> 

И это в шаблоне ColdFusion:

<cfimport prefix="tag" taglib="#expandpath('/CT')#"> 

Выдает ошибку:

This expression must have a constant value.

<cfset CT = expandpath('/CT')/> 
<cfimport prefix="tag" taglib="#CT#"> 

Броски ошибку:

This expression must have a constant value.

1

Я уверен, что вы не можете ничего сделать с тегом cfimport. Я думаю, вы должны использовать относительные пути, и вы должны включать его вручную на каждой странице. (в сравнении с помещением в файл application.cfc где-то или что-то еще)

+0

Это.mappings должно быть в верхней части Application.cfc, а cfimport должен быть на странице. Я успешно использовал This.mappings с cfinclude, но не cfimport. –

1

Я уверен, что expandPath уважает CF-сопоставления. Вы пробовали что-то вроде этого?

<cfset this.mappings["/CT"] = Expandpath("/myProjects/Project1/CustomTags")> 

<cfimport prefix="tag" taglib="#expandPath('/CT')#"> 
2

Вопреки тому, что сообщил Джейсон - У меня CFIMPORT работает нормально ж/одно приложение картографирования против одного глобально установленного в CFAdmin. CFIMPORT довольно запутанна в отношении сопоставлений (например, вы не можете использовать переменную для относительной траектории или использовать расширение), но вы должны иметь возможность делать то, что вы запрашиваете без проблемы.

У вас есть опция «Включить настройки приложения» в CFAdmin | Настройки, позволяющие использовать this.mappings? Какую версию CF вы используете?Я использую CF8 с этим кодом и не имеют никаких проблем:

Применение CFC (вне функции, но ж/в компоненте):

this.rootPath = getDirectoryFromPath(getCurrentTemplatePath()); // this assures path of application.cfc is used to determine path, likely equivalent to expandPath("/") 
structInsert(this.mappings, '/vp', this.rootPath); 

В CFC (вне функции, но ж/в компоненте):

<cfimport prefix="loader" taglib="/vp/view/_loader/"> 

Затем я могу использовать в ХФУ и работает, как и ожидалось.

+0

Это не сработало, но все в порядке. Я просто свяжусь со своими пользовательскими тегами, используя относительную адресацию. Работает приложение application.cfc stmts, но cfimport не удалось. –

+0

Убедитесь, что при использовании сопоставления для каждого приложения у вас нет глобальных сопоставлений в CFAdmin с тем же именем. В приведенном выше примере убедитесь, что вы удаляете «/ vp» из сопоставлений CFAdmin, чтобы гарантировать, что CF использует сопоставление для одного приложения против глобального. – mujimu

1

Я подтвердил это ... вы не можете использовать сопоставления, созданные с помощью структуры «this.mappings» в application.cfc.

Из документации компании Adobe (ColdFusion 9):

The path must be relative to the web root (and start with /), the current page location, or a directory specified in the Administrator ColdFusion mappings page.

CFImport Documentation for CF 9

Не знаю, почему Application.cfc отображения работают почти все остальное, но это. Какой-то разочаровывающий, так как мне очень понравилась идея определить как можно меньше в Администраторе. Мне нравится просто закрепить приложение и развернуть его где угодно.

+0

Спасибо, что комментировали Стива! Добро пожаловать в stackoverflow! –

Смежные вопросы