私はTomcatにJSF2.0アプリケーションを持っており、データベースにデータを入力するための多くの<h:inputText>
フィールドがあります。一部のフィールドは必須ではありません。
<h:inputText value="#{registerBean.user.phoneNumber}" id="phoneNumber">
<f:validateLength maximum="20" />
</h:inputText>
ユーザーがこのフィールドを空のままにすると、JSFはnull
の代わりに空の文字列""
を設定します。
すべての文字列をチェックせずにこの動作を修正するにはどうすればよいですか?
if (string.equals("")) { string = null; }
_context-param
_の次の_web.xml
_によって、空の送信された値をnullとして解釈するようにJSF 2.xを構成できます(これはかなり長い名前を持っているため、思い出せなかった理由でもあります;) )::
_<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
_
参考までに、そして興味のある人のために、JSF 1.2では(したがって、設計上、_Java.lang.String
_にConverter
を設定することはできないため、1.1以前ではありません)、これは次の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>
_
Java 6をまだ使用していない場合は、submittedValue.empty()
をsubmittedValue.length() == 0
に置き換えてください。
私はこれが問題の解決策を見つけることができないと言う正しい方法であることを願っています。
context-param
をweb.xml
に追加しましたが、結果がありません。この2つのcontext-param: javax.faces.PROJECT_STAGE =
開発javax.faces.VALIDATE_EMPTY_FIELDS = true
でTomcat6.0.24サーバーを使用しています