JSF di progettazione ignora tutti gli attributi personalizzati durante il rendering di HTML. Hai bisogno di un renderizzatore personalizzato. Questo è in caso di PrimeFaces <p:autoComplete>
(e tutti gli altri componenti) per fortuna relativamente semplice. È sufficiente ignorare solo il metodo renderPassThruAttributes()
in cui aggiungi il nuovo attributo che desideri rendere all'argomento attrs
e infine delegare al metodo super.
E.g.
package com.example;
import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import org.primefaces.component.autocomplete.AutoCompleteRenderer;
public class MyAutoCompleteRenderer extends AutoCompleteRenderer {
@Override
protected void renderPassThruAttributes(FacesContext facesContext, UIComponent component, String[] attrs) throws IOException {
String[] newAttrs = new String[attrs.length + 1];
System.arraycopy(attrs, 0, newAttrs, 0, attrs.length);
newAttrs[attrs.length] = "x-webkit-speech";
super.renderPassThruAttributes(facesContext, component, newAttrs);
}
}
per farlo funzionare, registrarlo nel modo seguente del vostro webapp faces-config.xml
:
<render-kit>
<renderer>
<component-family>org.primefaces.component</component-family>
<renderer-type>org.primefaces.component.AutoCompleteRenderer</renderer-type>
<renderer-class>com.example.MyAutoCompleteRenderer</renderer-class>
</renderer>
</render-kit>
(si può scoprire la famiglia e renderer tipo di componente, cercando il codice sorgente di AutoComplete
classe , sono specificati come COMPONENT_FAMILY
e RENDERER_TYPE
costanti in là)
No, il @FacesRenderer
annotazioni semplicemente non funzionerà quando lo scopo è sovrascrivere i renderer personalizzati che sono già registrati in uno faces-config.xml
.
dare un'occhiata a questo http://stackoverflow.com/a/6675592/617373 – Daniel