21

<h:inputText>私のデータベースにデータを入力するための多くのフィールドを備えたJSF2.0アプリケーションがTomcatにあります。一部のフィールドは必須ではありません。

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

""ユーザーがこのフィールドを空のままにすると、JSFは。の代わりに空の文字列を設定しますnull

すべての文字列をチェックせずにこの動作を修正するにはどうすればよいですか?

if (string.equals("")) { string = null; }
4

2 に答える 2

50

context-param次のようにして、空の送信された値をnullとして解釈するようにJSF 2.xを構成できますweb.xml(これはかなり長い名前を持っているので、思い出せなかった理由でもあります;)):

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

Converter参考までに、そして興味のある人のために、JSF 1.2では(したがって、設計上forを持つことができないため、1.1以前ではありませんjava.lang.String)、これは次の方法で回避できます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();
    }

}

...次のように登録する必要がありfaces-config.xmlます:

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

まだJava6を使用していない場合は、に置き換えsubmittedValue.empty()submittedValue.length() == 0ください。

も参照してください

于 2010-02-04T22:58:28.863 に答える
0

私はこれが問題の解決策を見つけることができないと言う正しい方法であることを願っています。

を追加しcontext-paramましたweb.xmlが、結果がありません。context-param: javax.faces.PROJECT_STAGE =この2つの開発でTomcat6.0.24サーバーを使用しますjavax.faces.VALIDATE_EMPTY_FIELDS = true

于 2010-02-08T11:00:02.070 に答える