public class WebDataBinder extends DataBinder
DataBinder
。Web 環境用に設計されていますが、サーブレット API に依存していません。ServletRequestDataBinder
など、より具体的な DataBinder バリアントの基本クラスとして機能します。警告 : データバインディングは、外部クライアントによるアクセスや変更を目的としていないオブジェクトグラフの部分を公開することにより、セキュリティの課題を引き起こす可能性があります。データバインディングの設計と使用は、セキュリティに関して慎重に検討する必要があります。詳細については、リファレンスマニュアルの Spring Web MVC および Spring WebFlux のデータバインディングに関する専用セクションを参照してください。
HTML チェックボックスと選択オプションの一般的な問題に対処するフィールドマーカーのサポートが含まれています。フィールドがフォームの一部であるが、空であるためにリクエストパラメーターを生成しなかったことを検出します。フィールドマーカーを使用すると、その状態を検出し、それに応じて対応する Bean プロパティをリセットできます。他の方法では存在しないパラメーターのデフォルト値は、空以外のフィールドの値を指定できます。
DataBinder.registerCustomEditor(java.lang.Class<?>, java.beans.PropertyEditor)
, DataBinder.setAllowedFields(java.lang.String...)
, DataBinder.setRequiredFields(java.lang.String...)
, setFieldMarkerPrefix(java.lang.String)
, setFieldDefaultPrefix(java.lang.String)
, ServletRequestDataBinder
修飾子と型 | フィールドと説明 |
---|---|
static StringSE | DEFAULT_FIELD_DEFAULT_PREFIX フィールドのデフォルトパラメーターが始まるデフォルトの接頭辞の後にフィールド名が続きます。 |
static StringSE | DEFAULT_FIELD_MARKER_PREFIX フィールドマーカーパラメーターが始まるデフォルトの接頭辞、その後にフィールド名が続きます。 |
DEFAULT_AUTO_GROW_COLLECTION_LIMIT, DEFAULT_OBJECT_NAME, logger
コンストラクターと説明 |
---|
WebDataBinder(ObjectSE target) デフォルトのオブジェクト名で、新しい WebDataBinder インスタンスを作成します。 |
WebDataBinder(ObjectSE target, StringSE objectName) 新しい WebDataBinder インスタンスを作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
protected void | adaptEmptyArrayIndices(MutablePropertyValues mpvs) "[]" で終わる名前のプロパティ値を確認してください。 |
protected void | bindMultipart(MapSE<StringSE, ListSE<MultipartFile>> multipartFiles, MutablePropertyValues mpvs) 指定されたリクエストに含まれるすべてのマルチパートファイルがあれば、バインドします(マルチパートリクエストの場合)。 |
protected void | checkFieldDefaults(MutablePropertyValues mpvs) フィールドのデフォルトの指定されたプロパティ値を確認します。 |
protected void | checkFieldMarkers(MutablePropertyValues mpvs) フィールドマーカーの指定されたプロパティ値を確認します。 |
protected void | doBind(MutablePropertyValues mpvs) この実装は、スーパークラスバインディングプロセスに委譲する前に、フィールドのデフォルトとマーカーチェックを実行します。 |
ObjectSE | getEmptyValue(ClassSE<?> fieldType) 指定されたフィールドの空の値を判別します。 |
protected ObjectSE | getEmptyValue(StringSE field, ClassSE<?> fieldType) 指定されたフィールドの空の値を判別します。 |
StringSE | getFieldDefaultPrefix() デフォルトのフィールドをマークするパラメーターのプレフィックスを返します。 |
StringSE | getFieldMarkerPrefix() 空の可能性があるフィールドをマークするパラメーターのプレフィックスを返します。 |
boolean | isBindEmptyMultipartFiles() 空の MultipartFile パラメーターをバインドするかどうかを返します。 |
void | setBindEmptyMultipartFiles(boolean bindEmptyMultipartFiles) 空の MultipartFile パラメーターをバインドするかどうかを設定します。 |
void | setFieldDefaultPrefix(StringSE fieldDefaultPrefix) 名前として「接頭辞 + フィールド」を持つ、デフォルト値フィールドを示すパラメーターに使用できる接頭辞を指定します。 |
void | setFieldMarkerPrefix(StringSE fieldMarkerPrefix) 空の可能性のあるフィールドをマークするパラメーターに使用できるプレフィックスを指定します。名前には「プレフィックス + フィールド」が含まれます。 |
addCustomFormatter, addCustomFormatter, addCustomFormatter, addValidators, applyPropertyValues, bind, checkAllowedFields, checkRequiredFields, close, convertIfNecessary, convertIfNecessary, convertIfNecessary, convertIfNecessary, createBeanPropertyBindingResult, createDirectFieldBindingResult, findCustomEditor, getAllowedFields, getAutoGrowCollectionLimit, getBindingErrorProcessor, getBindingResult, getConversionService, getDisallowedFields, getInternalBindingResult, getObjectName, getPropertyAccessor, getPropertyEditorRegistry, getRequiredFields, getSimpleTypeConverter, getTarget, getTypeConverter, getValidator, getValidators, initBeanPropertyAccess, initDirectFieldAccess, isAllowed, isAutoGrowNestedPaths, isIgnoreInvalidFields, isIgnoreUnknownFields, registerCustomEditor, registerCustomEditor, replaceValidators, setAllowedFields, setAutoGrowCollectionLimit, setAutoGrowNestedPaths, setBindingErrorProcessor, setConversionService, setDisallowedFields, setIgnoreInvalidFields, setIgnoreUnknownFields, setMessageCodesResolver, setRequiredFields, setValidator, validate, validate
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static final StringSE DEFAULT_FIELD_MARKER_PREFIX
このようなマーカーパラメーターは、フィールドが表示されていたこと、つまり、送信を引き起こしたフォームに存在していたことを示しています。対応するフィールド値パラメーターが見つからなかった場合、フィールドはリセットされます。この場合、フィールドマーカーパラメーターの値は重要ではありません。任意の値を使用できます。これは、HTML チェックボックスと選択オプションに特に役立ちます。
public static final StringSE DEFAULT_FIELD_DEFAULT_PREFIX
デフォルトパラメーターは、空の値ではなくデフォルト値を提供するという点でフィールドマーカーとは異なります。
public WebDataBinder(@Nullable ObjectSE target)
target
- バインドするターゲットオブジェクト (または、バインダーが単なるパラメーター値の変換に使用される場合は null
)DataBinder.DEFAULT_OBJECT_NAME
public void setFieldMarkerPrefix(@Nullable StringSE fieldMarkerPrefix)
"_FIELD" パラメーターのデフォルトは "_" です( "_subscribeToNewsletter" など)。空のフィールドチェックを完全にオフにする場合は、これを null に設定します。
HTML チェックボックスは、チェックされたときにのみ値を送信するため、以前にチェックされたボックスがチェックされていないことを検出することはできません。少なくとも、標準の HTML の方法ではできません。
これに対処する 1 つの方法は、フォームにチェックボックスが表示されていることがわかっている場合はチェックボックスパラメーター値を探し、値が見つからない場合はチェックボックスをリセットすることです。Spring Web MVC では、これは通常、カスタム onBind
実装で発生します。
この自動リセットメカニズムは、マーカーパラメーターが "subscribeToNewsletter" フィールドの "_subscribeToNewsletter" のように各チェックボックスフィールドに送信されるという条件で、この欠陥に対処します。いずれの場合でもマーカーパラメーターが送信されるため、データバインダーは空のフィールドを検出して、その値を自動的にリセットできます。
@Nullable public StringSE getFieldMarkerPrefix()
public void setFieldDefaultPrefix(@Nullable StringSE fieldDefaultPrefix)
"!FIELD" パラメーターのデフォルトは "!" です(例: "!subscribeToNewsletter" )。フィールドのデフォルトを完全にオフにする場合は、これを null に設定します。
HTML チェックボックスは、チェックされたときにのみ値を送信するため、以前にチェックされたボックスがチェックされていないことを検出することはできません。少なくとも、標準の HTML の方法ではできません。デフォルトのフィールドは、チェックボックスが非ブール値を表す場合に特に役立ちます。
デフォルトパラメーターが存在すると、指定されたフィールドのフィールドマーカーの動作が横取りされます。
@Nullable public StringSE getFieldDefaultPrefix()
public void setBindEmptyMultipartFiles(boolean bindEmptyMultipartFiles)
ユーザーが別のファイルを選択せずにフォームを再送信するときに、すでにバインドされている MultipartFile を保持する場合は、これをオフにします。そうでない場合、すでにバインドされている MultipartFile は空の MultipartFile ホルダーに置き換えられます。
MultipartFile
public boolean isBindEmptyMultipartFiles()
protected void doBind(MutablePropertyValues mpvs)
DataBinder
の doBind
mpvs
- MutablePropertyValues インスタンスとしてバインドするプロパティ値 checkFieldDefaults(org.springframework.beans.MutablePropertyValues)
, checkFieldMarkers(org.springframework.beans.MutablePropertyValues)
protected void checkFieldDefaults(MutablePropertyValues mpvs)
フィールドのデフォルトの存在は、フィールドが他に存在しない場合、指定された値を使用する必要があることを示します。
mpvs
- バインドされるプロパティ値 (変更可能)getFieldDefaultPrefix()
protected void checkFieldMarkers(MutablePropertyValues mpvs)
フィールドマーカーの存在は、指定されたフィールドがフォームに存在したことを示します。プロパティ値に対応するフィールド値が含まれていない場合、フィールドは空と見なされ、適切にリセットされます。
mpvs
- バインドされるプロパティ値 (変更可能)getFieldMarkerPrefix()
, getEmptyValue(String, Class)
protected void adaptEmptyArrayIndices(MutablePropertyValues mpvs)
"[]"
で終わる名前のプロパティ値を確認してください。これは、明示的なインデックス値のない配列構文のために一部のクライアントによって使用されます。そのような値が見つかった場合は、括弧を削除して、データバインディングの目的で同じ値を表現する予想される方法に適合させます。mpvs
- バインドされるプロパティ値 (変更可能)@Nullable protected ObjectSE getEmptyValue(StringSE field, @Nullable ClassSE<?> fieldType)
デフォルトの実装は、フィールド型が既知の場合は getEmptyValue(Class)
に委譲し、それ以外の場合は null
にフォールバックします。
field
- フィールドの名前 fieldType
- フィールドの型 null
)@Nullable public ObjectSE getEmptyValue(ClassSE<?> fieldType)
デフォルトの実装は次を返します:
Boolean.FALSE
null
がデフォルトとして使用されます fieldType
- フィールドの型 null
)protected void bindMultipart(MapSE<StringSE,ListSE<MultipartFile>> multipartFiles, MutablePropertyValues mpvs)
マルチパートファイルは、空でない場合、または空のマルチパートファイルもバインドするように構成されている場合にのみ、プロパティ値に追加されます。
multipartFiles
- フィールド名文字列の MultipartFile オブジェクトへのマップ mpvs
- バインドされるプロパティ値 (変更可能)MultipartFile
, setBindEmptyMultipartFiles(boolean)