耐火材料可能做得不当

refactory might be done unproperly

我是一名尝试学习 Grails 3.1 的初学者。关于默认,我在索引页上添加了以下划痕:

<ul>
    <g:each var="c" in="${grailsApplication.controllerClasses.sort { it.fullName } }">
        <li class="controller">
                        <g:link controller="${c.logicalPropertyName}">${c.fullName}</g:link>
        </li>
    </g:each>
</ul>

一开始,索引页显示没有控制器。然后,我创建了另一个控制器,例如 TodosController。因为这个controller名字不太好听,所以想把它重命名为TodoListController(当然是利用了Intellij IDEA中的refactory特性)。不幸的是,该代码仍然保留两个控制器并在索引页中显示它们。当我点击 TodosController 的 link 时,出现错误:

Could not resolve view with name '/todos/index' in servlet with name 'grailsDispatcherServlet'

错误的快照如下。 我花了很多时间找出它在哪里,但我没有发生任何神奇的事情。 有人遇到过这种情况吗?

听起来您有点混淆了 Grails。在这种情况下,最好的办法是停止您的应用程序和 运行 clean 命令,然后重试。原因是,Grails 将您的初始控制器编译到 build 目录中,其中 .class 文件仍然存在(即使 .groovy 文件消失了)。组件扫描仍然从 class 路径向上选择 class,最终得到两个控制器。