2012-05-08 34 views
5

JSF uzmanlarının şu sorunla karşılaştığı dış yardıma ihtiyacım var: Bazı sınıflar belirli sınıflar için faces-config.xml dosyasında tanımlıyım. dönüştürücü özelliğini veya etiketini sürekli kullanmak için. Örneğin: Bütün bileşen ağacı oluşturur ve CSV, HTML içine seviyeden sonra seviye dönüştürür ya da geç gerekebilir ne olursa olsun:ManagedBean'da sınıf için JSF Dönüştürücüsü (JSF 1.2) Getirme

<converter> 
     <converter-for-class>org.joda.time.DateTime</converter-for-class> 
     <converter-class>com.example.converter.JodaDateTimeConverter</converter-class> 
    </converter> 

Şimdi bir JSF-Bileşen için bir paletli ihtiyacı (extendedDataTable daha çok zengin) bulunmaktadır üzerinde. Yani, CSV, HTML, ... 'ye her seferinde yeniden uygulanmaya gerek kalmadan ihraç etmenin genel bir yolu. Neredeyse (benim eski bir meslektaşının harika bir fikir sayesinde) yapılır ve bunun bir kısmı hariç büyük bir çalışır: outputText ve String dönüştürür: komutu

Object expressionResult = expression.getValue(FacesContext.getCurrentInstance().getELContext()); 
    expressionResultString = expressionResult.toString(); 

bir saat değerini alır. Bu son satır, spesifik bir expressionResult için özel bir dönüştürücü varsa, sınıf için dönüştürücü ile değiştirmek istediğim şey. Sınıflarım için bu tam dönüştürücüyü nasıl bulacağımı bulamıyorum (faces-config tarafından belirtildiği gibi). FacesContext, kullanım durumum için herhangi bir yararlı yöntem/nesne tutmuyor gibi görünüyor. Faces-config.xml dosyasına doğrudan erişim yanlış görünüyor. Doğru bir yaklaşım gibi görünebilir: Ben bileşenler için kendilerini dönüştürücü-id ve uygun nitelik/etiketi kullanılır ama gerçekten işe yaramaz ek kod bu tür kaçınmak istiyorsanız Oldukça kolay olurdu

Converter converter = magically_fetch_the_correct_converter_for_expressionResult_type; 
    converter.getAsString(FacesContext.getCurrentInstance(), component, 
           expressionResult); 

.

dışarıda birileri bana yardım eder misiniz?

cevap

8
Sen Application#createConverter() aradığınız

.

Object object = expression.getValue(context.getELContext()); 
Class<?> type = expression.getType(context.getELContext()); 
Converter converter = context.getApplication().createConverter(type); 
String string = converter.getAsString(context, component, object); 
+0

Çok teşekkür ederim! Tam olarak aradığım şey buydu :) Keşke JSF sınıflarında kullanışlı JavaDoc vardı. Bu kesinlikle hayatımı çok daha kolaylaştıracaktır. –

+0

javadoc cevabım bağlantıları metin 'Uygulama # createConverter()'. – BalusC