내가

2011-11-25 3 views
1

가 나는 다음과 같은 매핑 (예를 들어)이있을 때 URL을 일치하도록 사용자 정의 정규식 패턴해야합니까 PrettyFaces이에 대한 사용자 정의 정규식 패턴을해야합니까 :내가

<url-mapping id="approvedQuestions"> 
    <pattern>/questions/approved/#{viewOption}/</pattern> 
    <view-id>/approved.xhtml</view-id> 
</url-mapping> 

을 어디 viewoption-부분 사용자가 URL을 '/'로 끝내지 않으면 일치해야합니다. viewOption 부분을 전혀 추가하지 않으면 일종의 기본값을 제공 할 수 있습니까?

그리고 viewOption이 열거 형인 경우 매개 변수를 소문자로 사용할 수 있습니까? 이제는 대문자로 작성해야 작동합니다.

답변

3

사용자 지정 정규식을 사용하여이 유형을 수행 할 수 있지만 URL 재 작성 규칙을 사용하여 후행 슬래시를 추가하는 것이 좋습니다. 하나의 URL (끝에 '/'가 있거나 없거나)을 선택해야합니다. 그렇지 않으면 실제로 두 개의 주소로 동일한 자원을 제공하고 검색 엔진 및 기타 크롤러가 처벌합니다.

이 작업을 수행하기 위해, 나는 같은 재 작성 규칙을 사용합니다 다음이가 '/'URL의 끝에서 누락 될 때 서버가 감지하게됩니다, 그것은 것

<rewrite match="https://stackoverflow.com/questions/approved/[^/]+" trailingSlash="append" /> 

요청을 올바른 위치로 리디렉션하고 끝에 '/'를 추가하십시오.

귀하의 열거 문제를 해결하기 위해, 이것은 좀 더 복잡합니다. 일반적으로 값을 열거 형에 직접 바인딩하지 않는 것이 좋습니다. 이 경우에 실제로 열거 형에 바인딩하지는 않지만 실제로 리터럴 문자열 URL 값을 요청 범위가 지정된 EL 컨텍스트에 바인딩합니다. 이 값은 응용 프로그램의 다른 곳에서 추출되고 ENUM으로 변환됩니다. PrettyFaces 4가 나오는

까지 내가 대신과 같이, 다음 올바른 값 자신의 로딩을 수행 할 작업 방법을 사용하여, 문자열 위치에 값을 바인딩하는 것이 좋습니다 :

<url-mapping id="approvedQuestions"> 
    <pattern>/questions/approved/#{params.viewOption}/</pattern> 
    <view-id>/approved.xhtml</view-id> 
    <action>#{params.loadViewOption}</action> 
</url-mapping> 

당신이 원하는 경우 OCPsoft의 고급 URL 재 작성 도구를 사용하면 Java 기반 URL 재 작성 도구 인 "재 작성"(http://ocpsoft.com/rewrite/)을 사용할 수 있지만 JSF와의 통합은 그다지 많지 않습니다.

PrettyFaces 4는 핵심으로 재 작성을 기반으로합니다. 현재 사용하고있는 모든 기능을 내가 더 이상 좋아하지 않는 기능으로 사용할 수있게됩니다. :

.addRule(Join.path("https://stackoverflow.com/questions/approved/{viewOption}").to("/approved.xhtml") 
.where("viewOption") 
.matches("[^/]+/?") 
.transformedBy(TrailingSlash.append()) 
.transformedBy(To.upperCase()) 

아직 라이브러리에 정의되지 않았기 때문에 자신 만의 트랜스포머를 만들어야하지만 일반적인 생각입니다. 현재 PrettyFaces에서 가능한 것보다 훨씬 강력하지만 동일한 JSF 탐색 통합을 제공하지는 않으며 구성하기가 조금 까다 롭습니다.

나는 ~ 링컨

+0

이 큰 답을 :) 작성 시간과 노력에 감사드립니다, 희망이 도움이! – LuckyLuke

+0

감사합니다. 기꺼이 도와 드리겠습니다. – Lincoln