Работайте для неисправной интерпретации_ампти_STRING_SUBMITTED_VALUES_AS_NULL в MOJARRA JSF 2.1

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

  •  25-10-2019
  •  | 
  •  

Вопрос

Я знаю, что есть несколько сообщений о преобразовании пустой строки в NULL в JSF2. Обычный рецепт - добавить следующее в 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>

Это просто не работает - вообще. Затем я создал индивидуальный конвертер строк, чтобы проверить, сработает ли это. Я явно добавил его в качестве преобразователя в свой входной текст (в противном случае он не стреляет, когда будет пустым).

Когда интерпретация_ампти_STRING_SUBMITTED_VALUES_AS_NULL устанавливается на TRUE, преобразователь получает NULL, а установщик для входного текста по -прежнему получает ».

При интерпретации_ампти_STRING_SUBMITTED_VALUES_AS_NULL установлено значение FALSE (или Complys Out), преобразователь получает «», а установщик для получения ввода текста получает »(даже после возврата преобразователя NULL).

@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();
    }
}

Я пробовал событие (безрезультатно), чтобы явно установил значение для компонента в GetAsObject:

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

Я использую JBOSS6 (действительно 6.1) и JSF 2.1.1.

Это было полезно?

Решение

Это не моджарра. Это специфично Tomcat (JBoss использует Tomcat в качестве сервискона). Добавьте следующий аргумент VM в параметры запуска.

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

К моему опыту, этот должен фактически только применить Number Свойства (int, long и т. Д.) Однако, поскольку определенная версия Tomcat 6.0.x (по крайней мере, после 6.0.20), она, по -видимому, также нарушена для строк, и она полагается на аргумент вышеуказанного виртуальной машины.

На Glassfish 3.x, например, он отлично работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top