2016-07-19 7 views
1

현재 사용하고있는 URL 매핑에 통합 된 매개 변수를 수정하는 방법을 알아 내려고하고 있습니다.URL 매핑 - 데이터베이스에서 가져온 매개 변수의 문자 바꾸기

static mappings = 
{ 

"/$controller/$action?/$id?/(.$format)?" 
{ 
     constraints { 
      // apply constraints here 
     } 

} 


name test1: "/.../$title/..."{ 
     controller = "study" 
     action = "st_show" 
    } 

name test2: "/.../$title/..."{ 
     controller = "search" 
     action = "se_show" 
    } 

매개 변수 $ 제목은 데이터베이스에서 가져온되고있는 다음과 같은 형식으로 전송 얻을 것이다 데이터 세트, [이것은 제목입니다] 꽤 많이있다. 따라서 앞뒤에 대괄호가 있고 단어 뒤에는 공백을 통해 구분됩니다.

중첩 된 매개 변수가있는 g : link를 통해 링크를 만들면 데이터베이스에서 가져올 때 URL에 삽입됩니다. 제가 시도하고있는 것은 SEO-URL을 만드는 것입니다. SEO-URL은 URL로 인코딩 된 "% 20"대신 하이픈으로 구분 된 특정 제목을 제공합니다.

는 지금까지, 나는 동적 URL이 같은보고를 생성 할 수 있었다 :

http://localhost:8080/projectname/show/%5BAllgemeine%20Bevölkerungs[...]/782/...PARAMS... 
또한

는 정적이어야하며 사용자가 열어 링크를 복사 할 수 있어야하지만 이미, JQuery와 통해 구현 페이지 자체 - 페이지를로드하는 동안 클라이언트 측 URL을 변경할 때 불가능합니다.

replaceAll. ('', '-')과 같은 함수를 정의하는 방법이 있습니다. 매핑의 매개 변수로 호출하여 하이픈 및 f.e로 공백을 대체 할 수 있습니다. 공백 문자가있는 대괄호? 그게 꽤 많은데, 내가 문서를 통해 알 수 없었던 것입니다.

이미 도움을 주셔서 감사합니다.

답변

0

정규 표현식을 포함하는 함수로 서비스를 만들고이 함수를 my g : 링크의 매개 변수 title에 실행하여 문제를 해결할 수있었습니다. 먼저 함수에 전달 된 문자열로 변환했습니다.

<g:link controller="study" action="st_show" params="[data: data, ... title: ConversionService.convert(fieldValue(bean: path).toString(), ... data: data)]"></g:link> 

그리고 ConversionService 펑션

public static String convert(String title){ 
     title = title.replaceAll("\\s", "-").replaceAll("[^0-9a-zA-Z\\-]", ""); 
     return title; 
}