2013-06-06 2 views
0

UrlMapping 파일에 다음 규칙을 적용했는데 이제 모든 컨트롤러가 ("/$controller/$action?/$id?")이 아닌 ("/$username") 매핑과 일치합니다.Grails 고정 컨트롤러 및 동작에 대한 URL 매핑 경로

아이디어는 짧은 URL을 사용하여 사용자의 모든 공개 항목을 나열하는 것이 었습니다. 그것은 작동하지만 다른 모든 컨트롤러는 작동하지 않습니다.

static mappings = { 

    "/$controller/$action?/$id?"{ 
     constraints { 
      // apply constraints here 
     } 
    } 

    "/$username" { 
     controller = 'user' 
     action = 'publicItens' 
    } 

    "/"(controller:'usuario', action: 'index') 
    "500"(view:'/error') 
} 

어떻게 올바르게 매핑 할 수 있습니까?

답변

1

해결을 제외 할 수 있습니다!

방금 ​​응용 프로그램의 각 컨트롤러에 대한 규칙을 자동으로 작성하기 위해 UrlMappings에 일부 코드를 작성했습니다. 사용자가/appname/controllerName을 입력 할 때이 접근법을 사용하면 자동으로 생성 된 규칙이 "$/username"규칙 대신 고려됩니다.

중요한 점은 더 이상 사용되지 않는 ApplicationHolder를 사용한다는 것입니다. ApplicationHolder를 직접 작성할 수 있습니다.

static mappings = { 

    //creates one mapping rule for each controller in the application 
    ApplicationHolder.application.controllerClasses*.logicalPropertyName.each { cName -> 
     "/$cName" { 
      controller = cName 
     } 
    } 

    "/$controller/$action?/$id?"{ 
    } 

    "/$username" { 
     controller = 'usuario' 
     action = 'itensPublicos' 
    } 

    "/"(controller:'usuario', action: 'index') 
    "500"(view:'/error') 
} 
0

URL 매핑에 /users/$username을 추가하기 만하면됩니다. 이것은 목표를 달성하는 가장 간단한 방법입니다.

"https://stackoverflow.com/users/$username" { 
     controller = 'user' 
     action = 'publicItens' 
    } 
+0

실제로 컨트롤러 이름없이 매핑하고 싶습니다. – lfrodrigues

+0

@lfrodrigues 그래서'$ username'이 컨트롤러 이름 중 하나와 같은 경우 어떻게 될까요? 예를 들어'search '라는 컨트롤러를 가지고 있지만 다른 사람이 사용자 이름을'search '로 설정하면 어떨까요? grails는 어떤 URL 매핑을 선택해야하는지 어떻게 알 수 있습니까? – GreenGiant

+0

그런 경우 grails가 컨트롤러를 선택합니다. 제어기 이름을 가진 사용자가 등록되지 않도록 새 사용자를 작성하는 제어기를 수정해야합니다. – lfrodrigues

0

당신은 아마 또한 첫 번째 URL 매핑 제약에서 사용자와 usario 컨트롤러 (같지 않음)

http://www.grails.org/doc/latest/ref/Constraints/notEqual.html

+0

귀하의 접근 방식을 테스트했지만 성공하지 못했습니다. "/ $ controller/$ action?/$ id?"대신 "/ $ username"규칙을 계속 사용합니다. 예 : "top"컨트롤러가 있고 주소 표시 줄에 localhost : 8080/appname/top을 입력하면 규칙이 상위 컨트롤러 대신 "user"컨트롤러에 매핑됩니다. – lfrodrigues