2013-01-22 3 views
2

내 MVC 컨트롤러가 JSF 2.1 인 webapp을 개발 중입니다. 나는JSF 2.1 - FacesContext 전략 얻기

FacesContext.getCurrentInstance()

내가

  • 보기
  • 에 메시지를 추가 플래시 범위에서 값을 검색/

    • 넣어 이것을 사용을 기반으로 여러 가지 방법이
    • 요청 받기 params map

    예 :

    public void addInfoMessage(String title, String description){ 
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,title, description)); 
    } 
    

    public void putFlashMessage(String code, String value){ 
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put(code, value); 
    } 
    

    등 난 그냥 궁금 해서요

    어디이 모든 단일 관리 빈을 사용하는 경우이 방법을 넣어 적절한 장소는? 나는 두 가지 옵션을 고려하십시오

    가) 모든 방법은 공공 및 정적 클래스 "JSFUtils"를 만들

    B) 그러나이와, 아니 선언 범위와 어떤 선언 @ManagedBean 주석 슈퍼 클래스 "ManagedBean은"을 만들 public 메서드. 모든 관리 Bean은이 클래스의 하위 여야하므로이 메소드를 상속합니다.

    답변

    3

    유틸리티 클래스가 권장되는 방법입니다. 직접 재 작성하는 대신 OmniFaces과 같은 기존 JSF 유틸리티 라이브러리를 사용할 수 있습니다. 여기에는 FacesMessages 유틸리티 클래스가 있습니다.

    String foo = Faces.getRequestParameter("foo"); 
    Messages.create(summary).detail(detail).add(); 
    Messages.addGlobalInfo(summary); // Without detail. 
    Faces.setFlashAttribute(key, value); 
    

    당신 참 또한 "슈퍼 콩"으로 멀리 추상, 그러나 이것은 재사용하지 않고 당신이 모든 JSF 프로젝트에서 자신을 계속 반복한다. 또한 클래스는 하나의 클래스에서만 확장 될 수 있습니다. 그래서 콩이 다른 수퍼 클래스에서 확장되어야한다면, 당신은 길을 잃게됩니다.

    +0

    귀하의 의견은 위대했습니다, 당신은 나를 감사드립니다 :) – Cichy

    +0

    당신은 오신 것을 환영합니다. – BalusC

    0

    다른 유용한 클래스를 확장 할 수있는 유연성을 허용하기 때문에 단순히 유틸리티 클래스를 권장합니다. 예를 들어 다른 bean간에 공유하려는 공통 논리가있는 클래스를 확장 할 수 있습니다.

    JSFUtils 클래스는 여러 가지 방법으로 시간이 지날수록 복잡해지고 관리하기가 어려워 질 수 있습니다. util 메소드를 분류하여 별도의 정적 유틸리티 클래스에 넣는 것이 좋습니다.

    관련 문제