我一直在寻找几个小时来回答这个问题,并且无法找到适合我的答案。我一直在使用相同的方法来调用cfc的操作,但在这种情况下,它似乎无法工作。
这是带有cfWheels 1.1.6的CF9
我有以下表格:
<form action="index.cfm?controller=QmAdmin&action=add-document" method="POST" id="addDocument" name="add" onsubmit="return submitForm(this.id);">
<input type="text" id="addDocumentName" name="name" />
<input type="text" id="addDocumentLink" name="link" />
<input type="text" id="addDocumentDetails" name="details"/>
<select name="parentid" id="addDocumentParent">
</select>
<input type="submit" name="submit" class="btn" value="Add"/>
</form>
单击提交按钮时,QmAdmin.cfc中的操作永远不会到达。我已经在要检查的操作中添加了日志记录,但从未到达过。我只是得到一个车轮错误页面:
Wheels.ViewNotFound
无法在Qmadmin控制器中找到addDocument操作的视图页面。
操作肯定存在,并且使用<cfinvoke component="controllers.QmAdmin" method="addDocument"/>
调用(使用正确的参数)将正常工作。
按要求采取行动:
<cffunction name="addDocument" access="remote">
<cfargument name="name" type="String">
<cfargument name="link" type="String">
<cfargument name="details" type="String">
<cfargument name="parentid" type="numeric">
<cftry>
<cfquery name="addDocument">
INSERT INTO BLANK.DOCUMENTS (ID, NAME, LINK, DETAILS, PARENT)
VALUES (BLANK.SQ_DOCUMENTS_ID.NEXTVAL,
<cfqueryparam value="#name#" cfsqltype="cf_sql_varchar">,
<cfqueryparam value="#link#" cfsqltype="cf_sql_varchar">,
<cfqueryparam value="#details#" cfsqltype="cf_sql_varchar">,
<cfqueryparam value="#parentid#" cfsqltype="cf_sql_numeric">)
</cfquery>
<cfcatch type="any">
<cfset flashInsert(error="An error occured, no changes were made")>
<cfset redirectTo(controller="qmadmin", action="qmsadmin")>
</cfcatch>
</cftry>
<cfset flashInsert(message="Successfully added document")>
<cfset redirectTo(controller="qmadmin", action="qmsadmin")>
</cffunction>
我已尝试清除coldfusion管理员中的缓存,更改大小写,将表单调用的格式更改为QmAdmin.cfc?method = addDocument&amp; arg1 =&amp; arg2 = etc.
直接在浏览器中使用url会返回相同的错误页面。
这个错误最近才开始发生,这让我觉得它必须是可以配置的东西才能引起它,但我对coldfusion来说相当新,所以不能把它钉死。
答案 0 :(得分:1)
事实证明,这可能归结为某种缓存错误。对使用controller=qmadmin
(小写)表单加载页面的控制器的第一次引用以及某种程度上的缓存阻止后续请求controller=QmAdmin
工作。
切换到车轮中的设计模式会禁用缓存,并且它再次开始工作。在此之后调整对控制器的初始调用controller=QmAdmin
似乎已经解决了问题。