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. Escalado horizontal de la aplicación JSF 2.0
-
28. Renderizar el componente JSF en función del rol de usuario
-
29. ¿Cómo hacer un componente reutilizable en JSF?
-
30. Agregar métodos de acción a un componente compuesto
Última pregunta
-
1. ¿Cómo puedo anotar tipos recursivos en TypeScript?
-
2. Benchmarking en Scala
-
3. PostgreSQL para Django en Elastic Beanstalk
-
4. ¿Cómo configurar una aplicación AngularJS en el momento de la carga?
-
5. $ .ready() antes de cerrar el cuerpo
-
6. Reproducción de código de desplazamiento de bit de C++ a C#
-
7. Cómo quitar el bloqueo en la asociación de archivos en eclipse
-
8. Cómo llamar al método de abuelos sin obtener el error E_STRICT?
-
9. ¿Es posible rastrear vistas y clones de mis repositorios de github?
-
10. Recuento Número de consultas Cada carga de página con PDO
-
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