2013-01-11 2 views
1

JSF에서 뷰 범위의 백업 빈을 사용하는 다른 문제 중 또 다른 문제점. 내 뷰 범위 백킹 빈에서 내부 클래스를 만들었습니다. 그 내부 클래스는 변환기입니다. 내 백킹 빈 (이 경우 선택 항목 하나의 목록)에서 일부 필드에 액세스해야하기 때문에 내부 클래스가 필요합니다. 갑자기 모든 요청 후에 내 backing bean의 @PostConstruct 메쏘드가 호출된다는 것을 알았습니다. 일부 검사 후 나는 변환기 속성이 문제이고 일부 Google 검색 후 (항상) BalusC's blog에 대한 이유를 찾았습니다.뷰 범위가 지정된 백업 빈의 내부 변환기로 수행 할 작업

그래서, 내 질문에 잘 작동하도록 내 변환기를 만드는 방법 및 또한 변환에 필요한 데이터 목록이 있습니까?

답변

1

변환기를 독립형 클래스로 분리하고 Application#evaluateExpressionGet()을 사용하여 변환기 메소드 내에서 뷰 범위의 빈 인스턴스에 액세스하십시오.

ViewBean viewBean = context.getApplication().evaluateExpressionGet(context, "#{viewBean}", ViewBean.class); 

그러나 이것은 다소 고약한 디자인입니다. 사용 가능한 항목 목록을 기반으로 선택한 항목을 올바르게 변환하기위한 구체적인 기능 요구 사항을 이해하는 경우 다른 방법은 실제 <f:selectItem>/<f:selectItems> 구성 요소를 기반으로 변환하는 일반 변환기를 사용하는 것입니다. JSF 유틸리티 라이브러리 OmniFaces에는 SelectItemsConverterSelectItemsIndexConverter이라는 두 가지 변환기가 있습니다.

+0

완벽합니다. BalusC에 감사드립니다. OmniFaces에는 내가 관심있는 몇 가지 추가 사항이 있으며, 사용하기 시작하는 순간이라고 생각합니다. 나는 그것이 저에게 다른 부작용을 일으키지 않기를 바랍니다. – partlov

+0

반갑습니다. 버전 1.3에서 볼 때까지 부작용이 발생해서는 안됩니다. – BalusC