2011-01-05 16 views
7

h:selectBooleanCheckbox için renderer'i geçersiz kılmaya çalışıyorum (here açıklanan nedenlerden dolayı):JSF 2.0: Özel oluşturucularla temel oluşturucuları nasıl geçersiz kılarsınız?

Ancak, oluşturucumuzu kaydetmeyi imkansız buluyorum. Bunu faces-config.xml:

<render-kit> 
    <renderer> 
     <component-family>javax.faces.SelectBoolean</component-family> 
     <renderer-type>javax.faces.Checkbox</renderer-type> 
     <renderer-class>com.myapp.CustomCheckboxRenderer</renderer-class> 
    </renderer> 
</render-kit> 

olarak bildirmeyi denedim. Tuttuğum değerler:

  • bileşen ailesi: javax.faces.component.html.HtmlSelectBooleanCheckbox
  • işleyici türü: javax.faces.component.html.SelectBooleanCheckboxTag

Ancak Çalışıyorum

Aynı zamanda RenderKit:

<description>Custom renderers</description> 
<render-kit-id>???</render-kit-id> 
<render-kit-class>com.sun.faces.renderkit.RenderKitImpl</render-kit-class> 

olduğunu açıklayarak denedim. Ama görebildiğiniz gibi render-kit-id değerini nereden alacağımı bilmiyorum.

Mojarra paketinin içinde jsf-ri-runtime.xml dosyası var, ancak renderleyicileri beyan etmiyor. Yalnızca bir ilgi alanı bulmak için doğrudan bir RenderKitFactory olduğunu beyan eder.

İşaretçiler?

cevap

10

İlk <renderer> beyannameniz iyi görünüyor, bu yüzden burada denedim.

package com.myapp; 

import java.io.IOException; 

import javax.faces.component.UIComponent; 
import javax.faces.context.FacesContext; 

import com.sun.faces.renderkit.html_basic.CheckboxRenderer; 

public class CustomCheckboxRenderer extends CheckboxRenderer { 

    public CustomCheckboxRenderer() { 
     System.out.println("CustomCheckboxRenderer <init>"); 
    } 

    @Override 
    public void decode(FacesContext context, UIComponent component) { 
     System.out.println("CustomCheckboxRenderer decode()"); 
     super.decode(context, component); 
    } 

    @Override 
    public void encodeBegin(FacesContext context, UIComponent component) throws IOException { 
     System.out.println("CustomCheckboxRenderer encodeBegin()"); 
     super.encodeBegin(context, component); 
    } 

    @Override 
    public void encodeEnd(FacesContext context, UIComponent component) throws IOException { 
     System.out.println("CustomCheckboxRenderer encodeEnd()"); 
     super.encodeEnd(context, component); 
    } 

} 

İyi çalışıyor. Hepsi stdout'a yazdırılır. Senin sorunun başka bir yerde yatıyor. Tomcat 7.0.5 üzerinde Mojarra 2.0.3 kullanıyordum.

+0

Sorunla ilgisi olmayan, neden bool olmayanları bir "selectBooleanCheckbox" değeri olarak kullanacaksınız? Boole olmayan bir nesne, bir boole durumunu nasıl temsil edebilir? – BalusC

+0

Hmm, haklısın, işe yarıyor. Daha önce encodeXXX yöntemleriyle test etmedim, özel işleyicimin 'getConvertedValue' yöntemine kesme noktası koymuştum. Ancak bunun nedeni tamamen farklı bir soruna konu olabilir. Her neyse, JSF bileşenleri, render-tipleri ve aileleri için bir liste var mı, yoksa her zaman kendi sınıflarına gitmeli ve bu değişkenleri aramalı mıyız? –

+0

JSF 2.0 özellikleri ve ['COMPONENT_FAMILY'] 'da tablo 8.1'in bir kombinasyonu (http://download.oracle.com/javaee/5/api/constant-values.html#javax.faces.component.UISelectBoolean.COMPONENT_FAMILY) JSF 2.0 API belgesindeki sabit alan değeri. Sonunda, her ikisi için JSF 2.0 spec bölüm 4.1.x danışılabilir. – BalusC

2

ben şöyle benim faces-config.xml için oluşturucular ekleyin: Sen gerekmez (ve olmamalıdır) bu senaryoda yeni bir hale kiti sınıf bildirmek

<faces-config> 
    <!--elided--> 
<render-kit> 
    <render-kit-id>HTML_BASIC</render-kit-id> 
    <renderer> 
     <display-name>MyRenderer</display-name> 
     <component-family>javax.faces.Output</component-family> 
     <renderer-type>foo.MyRenderer</renderer-type> 
     <renderer-class>foo.MyRenderer</renderer-class> 
     <!-- TODO: attributes for tooling --> 

.

+0

Varsayılanları geçersiz kılarken "render-kit-id" değerini bildirmek gerekiyor mu? İşe yaramaz gibi görünüyor ... HTML_BASIC "varsayılan" RenderKit'e başvurur mu? –

+0

@Tuukka Mustonen - render-kit-id, varsayılan RenderKit için isteğe bağlıdır (özellikte bir örnek vardır). HTML_BASIC gerçekten de varsayılan kimliktir. – McDowell

+0

Tamam, açıklama için teşekkürler! –

İlgili konular