Domanda

I tag personalizzati funzionano con i mapping? Sto cercando di non dover indirizzare la cartella CustomTags come indirizzo relativo.

Ho provato:

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

all'interno di Application.cfc e quindi

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

all'interno della mia pagina, ma non lo è.

Dice:

Impossibile importare la libreria di tag specificata da / CT. Si è verificato il seguente errore: C: \ Inetpub \ wwwroot \ CT. Assicurati di aver specificato una libreria di tag valida.

È stato utile?

Soluzione

Il documento afferma che funziona con una directory specificata nella pagina delle mappature di ColdFusion dell'amministratore. Hai provato a impostare la mappatura nell'amministratore di ColdFusion per vedere se funziona prima? Se funziona, ma this.mappings impostato per applicazione in application.cfc non funziona, probabilmente è un bug?!?

Modifica Ho testato il suggerimento di Adam di utilizzare la funzione expandPath (), ma anche questo non funziona perché l'attributo taglib deve contenere un valore costante. Non può contenere una variabile o una funzione. Semplicemente non funziona se non si utilizza un set di mapping nell'amministratore di ColdFusion. Ho provato i seguenti test usando questo 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>

E questo in un modello ColdFusion:

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

Genera l'errore:

  

Questa espressione deve avere una costante   valore.

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

Genera l'errore:

  

Questa espressione deve avere una costante   valore.

Altri suggerimenti

Contrariamente a quanto riportato da Jayson, ho CFIMPORT che funziona benissimo con una mappatura per applicazione rispetto a una impostata globalmente in CFAdmin. CFIMPORT è piuttosto irritabile riguardo alle mappature (ad esempio non è possibile utilizzare la variabile per relativepath, né usare exppath) - ma dovresti essere in grado di fare ciò che stai richiedendo senza problema.

Hai " Abilita impostazioni per app " controllato in CFAdmin | Impostazioni per permetterti l'uso di this.mappings? Quale versione di CF stai utilizzando? Sto usando CF8 con questo codice e non ho problemi:

Applicazione CFC (al di fuori di una funzione ma con componente):

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);

In CFC (al di fuori di una funzione ma con componente):

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

Posso quindi utilizzare il CFC e funziona come previsto.

Sono abbastanza sicuro che non puoi fare niente di speciale con il tag cfimport. Penso che devi usare percorsi relativi e devi includerlo manualmente in ogni pagina. (vs. metterlo nel file application.cfc da qualche parte o altro)

Sono abbastanza sicuro che expandPath rispetta le mappature CF. Hai provato qualcosa del genere?

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

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

L'ho confermato ... non puoi utilizzare i mapping creati tramite " this.mappings " struttura in application.cfc.

Dalla documentazione di Adobe (Coldfusion 9):

  

Il percorso deve essere relativo al Web   root (e inizia con /), la corrente   posizione della pagina o una directory   specificato nell'amministratore   Pagina delle mappature di ColdFusion.

Documentazione CFImport per CF 9

Non so perché i mapping di application.cfc funzionino praticamente per tutto il resto tranne questo. Un po 'deludente, dato che mi è piaciuta l'idea di definire il meno possibile nell'amministratore. Mi piace solo comprimere un'applicazione e distribuirla ovunque.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top