Trabajar para fallas interpretados_empty_string_submitited_values_as_null en mojarra jsf 2.1

StackOverflow https://stackoverflow.com/questions/6304025

  •  25-10-2019
  •  | 
  •  

Pregunta

Sé que hay una serie de publicaciones sobre la conversión de cadena vacía a NULL en JSF2. La receta habitual es agregar lo siguiente a Web.xml.

<context-param>
  <description>Does not appear to work</description>
  <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
  <param-value>true</param-value>
</context-param>

Esto simplemente no parece funcionar, en absoluto. Luego creé un convertidor de cadena personalizado para probar si eso funcionaría. Lo agregué explícitamente como convertidor a mi InputText (de lo contrario, no se dispara cuando está en blanco).

Cuando interpreta_empty_string_submited_values_as_null se establece en true, el convertidor recibe nulo y el setter para el texto de entrada todavía recibe "".

Cuando interpret_empty_string_submited_values_as_null se establece en falso (o se comenta), el convertidor recibe "" y el setter para el texto de entrada recibe "" (incluso después de que el convertidor regresa nulo).

@FacesConverter(forClass=java.lang.String.class, value="emptyStringToNull")
public class StringConverter implements Converter, Serializable {
    private static final long serialVersionUID = -1121162636180944948L;
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value == null || value.trim().isEmpty()) {
            return null;
        }
        return value;
    }

    public String getAsString(FacesContext context, UIComponent component, Object object) {
    if (object == null)
        return null;

    return object.toString();
    }
}

He intentado (en vano) establecer explícitamente el valor enviado por componente en getAsObject:

if (component instanceof EditableValueHolder)
    ((EditableValueHolder) component).setSubmittedValue(null);

Estoy usando JBoss6 (una instantánea de 6.1 realmente) y JSF 2.1.1.

¿Fue útil?

Solución

Esto no es específico de Mojarra. Esto es específico de Tomcat (JBoss usa Tomcat como ServletContainer). Agregue el siguiente argumento de VM a las opciones de inicio.

-Dorg.apache.el.parser.COERCE_TO_ZERO=false

A mi experiencia, este debería Realmente solo aplicar en Number Propiedades (int, Long, etc.), sin embargo, dado que una cierta versión tardía Tomcat 6.0.x (al menos después de 6.0.20) parece estar rota para las cuerdas también y depende del argumento de VM anterior.

En Glassfish 3.x, por ejemplo, funciona perfectamente bien en la caja.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top