JSF by Design ignoriert alle benutzerdefinierten Attribute beim Rendern von HTML. Sie benötigen einen benutzerdefinierten Renderer. Dies ist bei PrimeFaces <p:autoComplete>
(und allen anderen Komponenten) zum Glück relativ einfach. Es genügt, nur die renderPassThruAttributes()
-Methode zu überschreiben, bei der Sie das neue Attribut, das Sie rendern möchten, in das attrs
-Argument einfügen und schließlich an die Super-Methode delegieren.
z.
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);
}
}
Um es zu bekommen, um sie auszuführen, registrieren Sie als Webapp die folgt in 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>
(die Komponente Familie und Renderer-Typ durch einen Blick auf den Quellcode AutoComplete
Klasse herausfinden können, , sie sind da drin)
Nein, die @FacesRenderer
Anmerkung einfach als COMPONENT_FAMILY
und RENDERER_TYPE
Konstanten angegeben funktioniert nicht, wenn der Zweck darin besteht, benutzerdefinierte Renderer zu überschreiben, die bereits in einem faces-config.xml
registriert sind.
bei dieser einen Blick http://stackoverflow.com/a/6675592/617373 – Daniel