Kullanmak <: uı>, etiket dosyaları, kompozit bileşenler ve/veya özel bileşenler?
AKSARAY kullanılarak 2.0 Facelets ile son zamanlarda başladım ve yeni kompozit bileşenleri <ui:include>
ve diğer mevcut şablon oluşturma teknikleri Facelets 1 tarafından sunulan bilmek şaşıran var.x.
Bu yaklaşımlar arasındaki fark nedir? Aynı teklif gibi görünüyor işlevsel olarak: <ui:param>
vs, <ui:define>
<cc:attribute>
<ui:insert>
vs tag dosyaları, varolan şablonları yeniden kullanabilirsiniz. Kompozit bileşenleri durumunda sözdizimi ve açık arabirim belirtimi başka bir şey var mı? Performans farklı olabilir?
CEVAP
Bu yaklaşımlar arasındaki fark nedir?
Facelet şablonları
Eğer kullanılabilir şablonlar ana sayfa düzeni parçalara bölmek istiyorsanız Facelet şablonları (<ui:composition>
, <ui:include>
<ui:decorate>
) kullanın. E. g. başlık, menü, içerik, altbilgi, vb.
Örnekler:
- How to include another XHTML in XHTML using JSF 2.0 Facelets?
- What is the real conceptual difference between ui:decorate and ui:include?
- How to customize h:head when using ui:composition template?
- How to change title of a page when using ui:composition
- How to ajax-refresh dynamic include content by navigation menu?
Facelet tag dosyaları
Eğer/kod tekrarını önlemek en aza indirmek için kullanılabilir bileşenlerin bir grup olmasını istiyorsanız Facelet tag dosyaları kullanın. E. g. etiket giriş bir grup mesajı bileşenleri. Kompozit bileşenleri ile büyük fark Facelet bir etiket dosyası çıktı UIComponent
Bir tek temsil etmemektedir ve bazı durumlarda kompozit bir bileşen yeterli olmadığında tek çözüm olabilir. Genellikle, <ui:param>
dosyası içeren bir sinyal, bir ya da daha fazla <ui:include>
Bir sahip daha iyi bir etiket dosyası olabilir.
Örnekler:
- How to make a grid of JSF composite component?
- How to create a composite component for a datatable column?
- Primefaces outputLabel for composite component
Kompozit bileşenleri
Eğer tek bir sorumluluk saf XML kullanarak 14 ** tek kullanılabilir bir özel oluşturmak istiyorsanız kompozit malzeme kullanıyorlar. Bu tür kompozit bir bileşen genellikle mevcut bileşenleri ve/veya HTML bir grup oluşur ve fiziksel olarak tek bir bileşen olarak işlenen ve tek fasulye bir özelliği bağlı olması gerekiyordu. E. g. bir bileşen hangi temsil eder Bir tek java.util.Date
emlak tarafından 3 bağımlı <h:selectOneMenu>
bileşenler veya bileşen olan birleştirir <p:fileUpload>
<p:imageCropper>
Bir tek <my:uploadAndCropImage>
başvuran bir tek özel com.example.Image
varlık olarak özellik.
Örnekler:
- Our Composite Component wiki page
- The BalusC Code: Composite Component with multiple input fields
- Split java.util.Date over two h:inputText fields representing hour and minute with f:convertDateTime
- Select all items in Multiple SelectManyCheckBox with dynamic ids
- Extending JSF commandLink component
- Avoiding duplicate ids when reusing facelets compositions in the same naming container
Özel bileşenler
İşlevi olamaz bileşenleri standart/set destek eksikliği nedeniyle Facelet etiketi dosyalar ya da kompozit bileşenleri ile elde zaman, bir özel bileşenini kullanın. Örnekler PrimeFaces OmniFaces gibi açık kaynak bileşeni kütüphaneler kaynak kodu her yerde bulunabilir.
Etiket işleyicileri
HTML çıktısı işleme yerine AKSARAY bileşen ağacı binayı kontrol etmek istediğiniz zaman, bir bileşen yerine etiket işleyicisi kullanmak gerekir.
Örnekler:
- Custom Facelet component in JSF
- How can I access the content of something created with <ui:define> programmatically?
- Conditional render in tagfile depending on whether the attribute is specified or not
- The listener method of f:viewAction is not invoked, when there is a conversion error on the associated parameter
Performans farklı olabilir?
Teknik olarak, performans kaygısı azdır. Seçim beton fonksiyonel gereksinimleri ve soyutlama son derece, yeniden kullanım ve uygulama idame göre yapılmalıdır. Her yaklaşım iyi definied amaç ve sınırlamalar vardır.
Kompozit bileşenleri ancak bina/görünüm geri yükleme sırasında önemli bir yük (özellikle: tasarruf/görünüm durumu geri yükleme sırasında. Ve, mojarra bağlamda, kompozit bileşenleri atama varsayılan değerler ile performans sorunları vardı eski sürümlerinde, bu zaten 2.1.13 beri sabittir. Ayrıca, mojarra bağlamda bir <cc:attribute method-signature>
yöntem ifadeler için kullanılır, temel olarak tüm bileşen ağacı yeniden başvurulan HTTP oturumda, bu 2.1.29 / 2.2.8 beri sabit olduğunda memory leak vardı. Bellek sızıntısı aşağıda yaşlı olarak 2.1 sürümlerinde atlanır
<context-param>
<param-name>com.sun.faces.serializeServerState</param-name>
<param-value>true</param-value>
</context-param>
Ya da eski 2.2 sürümleri aşağıdaki gibi:
<context-param>
<param-name>javax.faces.SERIALIZE_SERVER_STATE</param-name>
<param-value>true</param-value>
</context-param>
""Kompozit bileşenleri ve client
performans bir acı olacak, sonra da javax.faces.STATE_SAVING_METHOD
set var. çok şey var nispeten hala, Sadece zaten bir basit ile mümkün olan temel işlevleri istiyorsanız kompozit bileşenleri kötüye kullanmayın dosya veya dosya etiketi vardır. Etiket dosyalar üzerinde kompozit bileşenleri tercih eden bir bahane olarak (okuma: *.taglib.xml
dosyası gerekli) yapılandırma kolaylığı kullanmayın.
Mojarra bağlamda 2.2.10 veya daha büyük kullanarak, üretim modu için nispeten kısa Facelets yenileme süresi devre dışı bırakmayı unutmayın:
<context-param>
<param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
<param-value>-1</param-value>
</context-param>
Kalkınma için bu ayarı kullanmayın, aksi takdirde Facelets dosyalarda değişikliklerin yansıtılması için her sunucu yeniden başlatmanız gerekiyor! Mojarra bağlamda 2.2.11 ve daha yeni, ve MyFaces zaten javax.faces.PROJECT_STAGE
30 ** ayarlandığında 28 ** varsayılan.
Kullanmak < muyum;ımg>, <objec...
Reset veya özel sürüm kullanmaya Gah i...
Nasıl özel yöntemleri, alanları veya i...
ASP.NET MVC - Set İİdentity özel veya ...
Özel SSH-key veya Ruby olmadan kabuk k...