2011-05-12 2 views
0

URL 경로를 처리하는 데 prettyfaces을 사용하고 있습니다.JSF - 링크를 따라 속성을 설정하는 중

내가하고 싶은 일은 링크를 따라 언어 속성을 설정하는 것입니다 (언어 선택). 다음과 같은 것 :

<h:link outcome="#{bean.currentPath}" value="English"> <!-- path goes to self --> 
    <f:param name="link" value="#{currentTopic.link}" /> 
    <f:param name="lang" value="eng" /> 
</h:link> 

prettyconfig는 링크를 가져오고 따라하지만 어떻게 언어 빈에 매개 변수를 보낼 수 있습니까?

<url-mapping id=""> 
    <pattern value="/topic/#{link:bean.link}" /> 
    <view-id>/faces/topic.jsf</view-id> 
</url-mapping> 

(@SessionScoped) 빈은 (@RequestScoped) 상태를 저장하고, 언어 빈 상태입니다. 둘 다 @ManagedBeans입니다.

+0

기존의 URL 패턴에 추가 할 수 있습니까? /topic/#{link:bean.link}/#{lang:languageBean.lang} –

+0

나는 그것을 생각했다. 그러나 나의 교수는 여기에있다. 이 언어는 사용자가 볼 수있는 URL이 없어도 서버 측에서 완전히 정의되어야합니다. 단 한번 정의 되었기 때문에 볼 수 있습니다. –

+0

그러나 이것은 엄청난 SEO 단점입니다. 다른 언어로 된 콘텐츠는 이러한 방식으로 중복 된 콘텐츠로 표시됩니다. – BalusC

답변

1

다음은 나머지 URL을 사용하는 옵션입니다.

<pretty:link mappingId="LanguageTopic"> 
    <f:param name="link" value="#{currentTopic.link}" /> 
    <f:param name="lang" value="eng" /> 
    English 
</pretty:link> 

꽤-config.xml 파일 :

<url-mapping id="LanguageTopic"> 
    <pattern value="/topic/#{link:linkBean.link}/#{lang:languageBean.lang}/" /> 
    <view-id>/faces/topic.jsf</view-id> 
    <action>#{linkBean.cleanUrl}</action> 
</url-mapping> 

<url-mapping id="Topic"> 
    <pattern value="/topic/#{link:linkBean.link}/" /> 
    <view-id>/faces/topic.jsf</view-id> 
</url-mapping> 

언어 콩 :

@ManagedBean(name = "languageBean") 
@SessionScoped 
public class LanguageBean implements Serializable { 

    private static final long serialVersionUID = 4460586548949990787L; 

    /** 
    * Stores the users language preference 
    */ 
    private String lang; 

    public String getLang() { return this.lang; } 
    public void setLang(String lang) { this.lang = lang; } 

} 

링크 콩 :

그것은 당신이 찾고있는 매우 우아한 아니지만 아마도 달성
@ManagedBean(name = "linkBean") 
@RequestScoped 
public class LinkBean { 

    /** 
    * Stores the resource the user is currently accessing 
    */ 
    private String link; 

    public String getLink() { return this.link; } 
    public void setLink(String link) { this.link = link; } 

    /** 
    * Cleans language specific rest urls to non-specific urls 
    */ 
    public void cleanUrl() { 
     final ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); 

     try { 
      externalContext.redirect("/topic/" + this.link + "/"); 
     } catch (IOException ex) { 
      //log or whatever you want here 
     }  
    } 
} 
관련 문제