没有这样的 属性:class 的当前人:kaf82.portal.PersonsController

No such property: currentperson for class: kaf82.portal.PersonsController

这里是控制器的代码:

package kaf82.portal

import javax.xml.parsers.DocumentBuilderFactory

class PersonsController {
    def personList = []
    String personsFile = new File('media/data/personsData.xml').text   

    def allpersons () {
        def persons = new XmlParser().parseText(personsFile)
        [persons: persons]        
    }    

    def currentperson () {        
        int id=params.id.toInteger()    
        getPersons()
        [currentperson=personList.get(id-1)]       
    }

    def getPersons() {
        def builder = DocumentBuilderFactory.newInstance().newDocumentBuilder()
        def inputStream = new ByteArrayInputStream(personsFile.bytes)
        def root  = builder.parse(inputStream).documentElement        
        def persons = root.childNodes
        (0..<persons.length).each{ processPerson(persons.item(it)) }
        ...

我正在使用 Grails 2.4.4。

这是堆栈跟踪

 Line | Method
->>   17 | currentperson in PersonsController.groovy
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    198 | doFilter      in PageFragmentCachingFilter.java
|     63 | doFilter . .  in AbstractFilter.java
|     53 | doFilter      in GrailsAnonymousAuthenticationFilter.java
|     49 | doFilter . .  in RequestHolderAuthenticationFilter.java
|     82 | doFilter      in MutableLogoutFilter.java
|   1142 | runWorker . . in java.util.concurrent.ThreadPoolExecutor
|    617 | run           in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run . . . . . in java.lang.Thread

您可能想使用 [currentperson=personList.get(id-1)] 创建地图,但此语法错误。

[currentperson: personList.get(id-1)]

另外这个 personList 作为 属性 看起来不对。

假设第 17 行是:

[currentperson=personList.get(id-1)] 

您没有正确初始化地图(参见 groovy docs)。正确的解决方案是:

[currentperson: personList.get(id-1)] 

否则编译器应该有一个变量currentperson,你想给它赋值。