h: inputText que é obrigado a propriedade String é submeter cadeia vazia em vez de null

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

  •  18-09-2019
  •  | 
  •  

Pergunta

Tenho uma aplicação JSF 2.0 no Tomcat com muitos campos <h:inputText> para entrada de dados no meu banco de dados. Alguns campos não são necessários.

<h:inputText value="#{registerBean.user.phoneNumber}" id="phoneNumber">
    <f:validateLength maximum="20" />
</h:inputText>

Quando o usuário deixar este campo vazio conjuntos JSF vazio "" cadeia em vez de null.

Como posso corrigir este comportamento sem verificar cada corda com

if (string.equals("")) { string = null; }
Foi útil?

Solução

Você pode configurar JSF 2.x para interpretar esvaziar valores enviados como nula pela seguinte context-param em web.xml (que tem um nome muito longo, que também vai ser por isso que eu não poderia recuperá-lo;)):

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

Para referência e para aqueles que estão interessados, em JSF 1.2 (e, portanto, não 1.1 ou mais velhos, porque é por design não é possível ter um Converter para java.lang.String) este é workaroundable com o seguinte Converter:

public class EmptyToNullStringConverter implements Converter {

    public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) {
        if (submittedValue == null || submittedValue.isEmpty()) {
            if (component instanceof EditableValueHolder) {
                ((EditableValueHolder) component).setSubmittedValue(null);
            }

            return null;
        }

        return submittedValue;
    }

    public String getAsString(FacesContext facesContext, UIComponent component, Object modelValue) {
        return (modelValue == null) ? "" : modelValue.toString();
    }

}

... que precisa ser registrado em faces-config.xml da seguinte forma:

<converter>
    <converter-for-class>java.lang.String</converter-for-class>
    <converter-class>com.example.EmptyToNullStringConverter</converter-class>
</converter>

No caso de você não estiver em Java 6, no entanto, substituir submittedValue.empty() por submittedValue.length() == 0.

Veja também

Outras dicas

Espero que este seja o caminho certo para dizer que eu não posso encontrar uma solução para o problema.

Eu tenho adicionar o context-param ao meu web.xml mas não tem nenhum resultado. Eu uso um Tomcat 6.0.24 Server com este context-param: javax.faces.PROJECT_STAGE = Desenvolvimento duas javax.faces.VALIDATE_EMPTY_FIELDS = true

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top