Estoy intentando escribir un representador que procese el atributo placeholder
en un componente <h:inputText>
. Me dirigí a este camino después de leer JSF 2.0 strips out needed HTML5 attributes y parece correcto. Aquí está mi costumbre procesadorAgregar soporte de atributo personalizado (HTML5) al componente JSF 2.0 UIInput
public class InputRenderer extends com.sun.faces.renderkit.html_basic.TextRenderer{
@Override
public void encodeBegin(FacesContext context, UIComponent component)
throws IOException {
System.out.println("Rendering :"+component.getClientId());
String placeholder = (String)component.getAttributes().get("placeholder");
if(placeholder != null) {
ResponseWriter writer = context.getResponseWriter();
writer.writeAttribute("placeholder", placeholder, "placeholder");
}
super.encodeBegin(context, component);
}
@Override
public void decode(FacesContext context, UIComponent component) {
super.decode(context, component);
}
@Override
public void encodeEnd(FacesContext context, UIComponent component)
throws IOException {
super.encodeEnd(context, component);
}
}
Y este procesador se ha registrado en las caras de los config como
<render-kit>
<renderer>
<component-family>javax.faces.Input</component-family>
<renderer-type>javax.faces.Text</renderer-type>
<renderer-class>com.example.renderer.InputRenderer</renderer-class>
</renderer>
</render-kit>
Esto pone titulado bien, no hay problemas.
Mi intención es procesar el atributo placeholder
, insértelo y luego delegue el procesamiento en super. Mi código anterior no funciona porque estoy insertando el atributo en un lugar equivocado. Debe insertarse después de que se haya ejecutado writer.startElement('input')
. Sin embargo, startElement debe estar sucediendo en algún lugar del método encodeBegin()
del super. Entonces, ¿cómo puedo insertar un atributo personalizado ('marcador de posición' en este caso) y luego continuar el flujo de ejecución?
NB: El código anterior agrega un atributo placeholder
pero no al componente de entrada que pretendo, lo escribe en el padre de la Entrada (ya que estoy tratando de escribir un atributo antes de que el componente sea realmente escrito en la secuencia, aplica el atributo al componente actual)
¡Esta es, de lejos, la respuesta más práctica y la mejor! :) – Nikhil
Gracias por la respuesta y si bien esta es una respuesta justa, el código tiene un error. El retorno de get (atributo) es un Objeto, que puede ser un Booleano (considere el atributo 'required' por ejemplo). Elimine por completo la hebra (String) y establezca return-type como Object. –
Tenga en cuenta que esto no funciona con '' padre con '' hijos. JSF coloca el atributo 'required' en el elemento' 'en lugar del elemento' '. ¿Dije que amo JSF? –
6
+0
2
+0
Cuestiones relacionadas
-
1. Agregar atributos personalizados al componente de autocompletado Primefaces en JSF
-
2. El componente personalizado JSF no se encuentra
-
3. Componente compuesto JSF con bean de respaldo
-
4. JSF recursiva Componente Compuesto
-
5. mensajes personalizados JSF 2.0
-
6. .net 2.0 componente IRC
-
7. Marcos CRUD JSF 2.0 recomendados
-
8. Componente compuesto JSF
-
9. WIX agregar nuevo archivo al componente compartido
-
10. Carga de archivo JSF 2.0
-
11. Internacionalización en JSF 2.0
-
12. Componente personalizado de JSF que pierde el foco de entrada en la actualización ajax
-
13. JSF 2 componentes personalizados que tienen lenguaje de expresión para el valor del atributo no activan el colocador atributo
-
14. asp.net mvc Agregar al atributo AUTORIZAR
-
15. Agregar elementos al lienzo html5
-
16. JSF 1.2 JSP 2.0 Archivo de etiqueta personalizado simple con atributos
-
17. JSF 2.0: solicitud de ajax al presionar ENTER
-
18. Recuperando el ID de cliente de otro componente en JSF 2.0
-
19. ¿Cómo agregar espacio de nombre personalizado al elemento HTML en JSF?
-
20. JSF 2.0 RenderResponse y ResponseComplete
-
21. Comentarios invisibles en jsf 2.0?
-
22. JSF 2.0 ¿Cómo usar Eclipse?
-
23. JSF 2.0 Acceso al bean Scope Application desde otro Bean
-
24. ¿Nunca se debe usar immediate = "true" cuando se trata de un componente AJAXified JSF 2.0?
-
25. Enlace de valor dinámico del componente JSF
-
26. Soporte multilingüe personalizado
-
27. Renderizar el componente JSF en función del rol de usuario
-
28. Escalado horizontal de la aplicación JSF 2.0
-
29. ¿Cómo hacer un componente reutilizable en JSF?
-
30. Agregar métodos de acción a un componente compuesto
Última pregunta
-
1. ¿Código para extraer desde el lado derecho con comando de corte?
-
2. No se pueden mostrar 3 tipos de mapas en Google Maps
-
3. JAXB Bean Generation
-
4. Uso de CDATA dentro de otro CDATA
-
5. Hibernate (JPA) múltiple @OneToMany para el mismo modelo
-
6. Android: ¿el patrón ViewHolder se implementa automáticamente en CursorAdapter?
-
7. ¿Cómo lleno una matriz de longitud desconocida en Powershell?
-
8. Python - importar en if
-
9. ¿Cómo se cambia el texto del marcador de posición HTML 5 que aparece en el campo de la fecha en Chrome
-
10. variables en PHP gettext
-
1. Agregar atributos personalizados al componente de autocompletado Primefaces en JSF
-
2. El componente personalizado JSF no se encuentra
-
3. Componente compuesto JSF con bean de respaldo
-
4. JSF recursiva Componente Compuesto
-
5. mensajes personalizados JSF 2.0
-
6. .net 2.0 componente IRC
-
7. Marcos CRUD JSF 2.0 recomendados
-
8. Componente compuesto JSF
-
9. WIX agregar nuevo archivo al componente compartido
-
10. Carga de archivo JSF 2.0
Puede anular el método startElement ResponseWriters, ese método solo se llama una vez y luego puede restaurar el objeto original del redactor de respuesta.
Fuente
2011-10-25 08:59:30 dileks
Lo anterior funciona mejor (aunque faltan algunas importaciones, corregí getWrapped() como en JSF 1.2 es ahora pública, etc.). Creo que esta es la mejor respuesta. También es probable que sea mejor utilizar if ("constante" .equals (valor)) que maneja la verificación nula, ya que la constante nunca será nula pero no arrojará un NPE. Ahora, oficialmente, desprecio la convolución de JSF como una alternativa de alguna manera mejor, pero aprecio todos los buenos comentarios aquí (gracias a Joel por respaldar StackOverflow). –
Y para anular para MyFaces 2.0.8+
Fuente
2013-12-13 05:36:08 Madhuri
Para aquellos que leen demasiado rápido, también necesita la etiqueta desde arriba en su archivo faces-config.xml. –
Cuestiones relacionadas