public abstract class AbstractView extends WebApplicationObjectSupport implements View, BeanNameAware
View
実装の抽象基本クラス。サブクラスは JavaBeans にして、Spring 管理の Bean インスタンスとして便利に構成できるようにする必要があります。静的属性をサポートし、さまざまな方法でビューで使用できるようにします。静的属性は、レンダリング操作ごとに、指定された動的属性(コントローラーが返したモデル)とマージされます。
WebApplicationObjectSupport
を拡張します。これは、一部のビューに役立ちます。サブクラスは、実際のレンダリングを実装する必要があります。
修飾子と型 | フィールドと説明 |
---|---|
static StringSE | DEFAULT_CONTENT_TYPE デフォルトのコンテンツ型。 |
logger
PATH_VARIABLES, RESPONSE_STATUS_ATTRIBUTE, SELECTED_CONTENT_TYPE
コンストラクターと説明 |
---|
AbstractView() |
修飾子と型 | メソッドと説明 |
---|---|
void | addStaticAttribute(StringSE name, ObjectSE value) このビューに静的データを追加し、各ビューで公開します。 |
protected MapSE<StringSE, ObjectSE> | createMergedOutputModel(MapSE<StringSE,?> model, HttpServletRequestEE request, HttpServletResponseEE response) 動的な値と静的な属性を含む結合出力マップ(非 null )を作成します。 |
protected RequestContext | createRequestContext(HttpServletRequestEE request, HttpServletResponseEE response, MapSE<StringSE, ObjectSE> model) 指定された属性名で公開する RequestContext を作成します。 |
protected ByteArrayOutputStreamSE | createTemporaryOutputStream() このビューの一時的な OutputStream を作成します。 |
protected void | exposeModelAsRequestAttributes(MapSE<StringSE, ObjectSE> model, HttpServletRequestEE request) 指定されたマップ内のモデルオブジェクトをリクエスト属性として公開します。 |
protected StringSE | formatViewName() |
protected boolean | generatesDownloadContent() このビューがダウンロードコンテンツ(通常は PDF ファイルや Excel ファイルなどのバイナリコンテンツ)を生成するかどうかを返します。 |
MapSE<StringSE, ObjectSE> | getAttributesMap() 特定のエントリを追加または上書きするオプションを使用して、 Map がこのビューの静的属性にアクセスできるようにします。 |
StringSE | getBeanName() ビューの名前を返します。 |
StringSE | getContentType() このビューのコンテンツ型を返します。 |
StringSE | getRequestContextAttribute() RequestContext 属性の名前を返します(存在する場合)。 |
protected HttpServletRequestEE | getRequestToExpose(HttpServletRequestEE originalRequest) |
MapSE<StringSE, ObjectSE> | getStaticAttributes() このビューの静的属性を返します。 |
boolean | isExposePathVariables() モデルにパス変数を追加するかどうかを返します。 |
protected void | prepareResponse(HttpServletRequestEE request, HttpServletResponseEE response) レンダリングのために指定されたレスポンスを準備します。 |
void | render(MapSE<StringSE,?> model, HttpServletRequestEE request, HttpServletResponseEE response) 指定されたモデルを指定してビューを準備し、必要に応じて静的属性と RequestContext 属性をマージします。 |
protected abstract void | renderMergedOutputModel(MapSE<StringSE, ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) ビューを実際にレンダリングするには、サブクラスでこのメソッドを実装する必要があります。 |
void | setAttributes(PropertiesSE attributes) java.util.Properties オブジェクトからこのビューの静的属性を設定します。 |
void | setAttributesCSV(StringSE propString) 静的属性を CSV 文字列として設定します。 |
void | setAttributesMap(MapSE<StringSE,?> attributes) このビューの静的属性をマップから設定します。 |
void | setBeanName(StringSE beanName) ビューの名前を設定します。 |
void | setContentType(StringSE contentType) このビューのコンテンツ型を設定します。 |
void | setExposeContextBeansAsAttributes(boolean exposeContextBeansAsAttributes) 属性がアクセスされたら、遅延チェックを通じて、アプリケーションコンテキスト内のすべての Spring Bean をリクエスト属性としてアクセス可能にするかどうかを設定します。 |
void | setExposedContextBeanNames(StringSE... exposedContextBeanNames) 公開することになっているコンテキスト内の Bean の名前を指定します。 |
void | setExposePathVariables(boolean exposePathVariables) モデルにパス変数を追加するかどうかを指定します。 |
void | setRequestContextAttribute(StringSE requestContextAttribute) このビューの RequestContext 属性の名前を設定します。 |
protected void | setResponseContentType(HttpServletRequestEE request, HttpServletResponseEE response) View.SELECTED_CONTENT_TYPE リクエスト属性が存在し、具体的なメディア型に設定されていない限り、構成された content type にレスポンスのコンテンツ型を設定します。 |
StringSE | toString() |
protected void | writeToResponse(HttpServletResponseEE response, ByteArrayOutputStreamSE baos) 指定された一時的な OutputStream を HTTP レスポンスに書き込みます。 |
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext
getApplicationContext, getMessageSourceAccessor, initApplicationContext, obtainApplicationContext, requiredContextClass, setApplicationContext
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, waitSE, waitSE, waitSE
public void setContentType(@Nullable StringSE contentType)
ビュー自体がコンテンツ型を設定すると想定される場合、サブクラスによって無視される場合があります。JSP の場合。
@Nullable public StringSE getContentType()
View
の getContentType
null
public void setRequestContextAttribute(@Nullable StringSE requestContextAttribute)
@Nullable public StringSE getRequestContextAttribute()
public void setAttributesCSV(@Nullable StringSE propString) throws IllegalArgumentExceptionSE
「静的」属性は、View インスタンス構成で指定される固定属性です。一方、「動的」属性は、モデルの一部として渡される値です。
public void setAttributes(PropertiesSE attributes)
java.util.Properties
オブジェクトからこのビューの静的属性を設定します。「静的」属性は、View インスタンス構成で指定される固定属性です。一方、「動的」属性は、モデルの一部として渡される値です。
これは、静的属性を設定する最も便利な方法です。同じ名前の値がモデルに含まれている場合、静的属性は動的属性によってオーバーライドされることに注意してください。
文字列 "value" (PropertiesEditor で解析)または XML Bean 定義の "props" 要素を入力できます。
PropertiesEditor
public void setAttributesMap(@Nullable MapSE<StringSE,?> attributes)
「静的」属性は、View インスタンス構成で指定される固定属性です。一方、「動的」属性は、モデルの一部として渡される値です。
XML Bean 定義の「マップ」または "props" 要素を取り込むことができます。
attributes
- キーとして名前文字列、値として属性オブジェクトを持つマップ public MapSE<StringSE,ObjectSE> getAttributesMap()
Map
がこのビューの静的属性にアクセスできるようにします。attributesMap[myKey]
などを介してエントリを直接指定する場合に便利です。これは、子ビュー定義のエントリを追加またはオーバーライドする場合に特に便利です。
public void addStaticAttribute(StringSE name, ObjectSE value)
「静的」属性は、View インスタンス構成で指定される固定属性です。一方、「動的」属性は、モデルの一部として渡される値です。
render
を呼び出す前に呼び出す必要があります。
name
- 公開する属性の名前 value
- 公開する属性値 render(java.util.Map<java.lang.String, ?>, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
public MapSE<StringSE,ObjectSE> getStaticAttributes()
変更できないマップを返します。これは、マップを操作するためではなく、コンテンツをチェックするためだけのものであるためです。
public void setExposePathVariables(boolean exposePathVariables)
パス変数は通常、@PathVariable
アノテーションを介して URI テンプレート変数にバインドされます。これらは事実上、型変換が適用されて型付きオブジェクト値を導出する URI テンプレート変数です。このような値は、同じ URL や他の URL へのリンクを作成するためのビューで頻繁に必要になります。
モデルに追加されたパス変数は、静的属性(setAttributes(Properties)
を参照)をオーバーライドしますが、モデルにすでに存在する属性はオーバーライドしません。
デフォルトでは、このフラグは true
に設定されています。具体的なビュー型はこれをオーバーライドできます。
exposePathVariables
- パス変数を公開する場合は true
、それ以外の場合は false
public boolean isExposePathVariables()
public void setExposeContextBeansAsAttributes(boolean exposeContextBeansAsAttributes)
これにより、JSTL の c:out
値式と同様に、JSP 2.0 ページのプレーンな ${...}
式でそのようなすべての Bean にアクセスできるようになります。
デフォルトは "false" です。このフラグをオンに切り替えて、リクエスト属性ネームスペース内のすべての Spring Bean を透過的に公開します。
注意 : コンテキスト Bean は、手動で追加された同じ名前のカスタムリクエストまたはセッション属性をオーバーライドします。ただし、同じ名前のモデル属性(このビューに明示的に公開されている)は、常にコンテキスト Bean をオーバーライドします。
public void setExposedContextBeanNames(StringSE... exposedContextBeanNames)
アプリケーションコンテキストですべての Spring Bean を公開する場合は、"exposeContextBeansAsAttributes"
フラグをオンにしますが、このプロパティの特定の Bean 名はリストしません。
public void setBeanName(@Nullable StringSE beanName)
フレームワークコードは、ビューを構築するときにこれを呼び出す必要があります。
BeanNameAware
の setBeanName
beanName
- ファクトリ内の Bean の名前。この名前は、ファクトリで使用される実際の Bean 名であり、最初に指定した名前とは異なる場合があります。特に内部 Bean 名の場合、実際の Bean 名は "#..." サフィックスを追加することで一意になります。必要に応じて、BeanFactoryUtils.originalBeanName(String)
メソッドを使用して、元の Bean 名(サフィックスなし)を抽出します。@Nullable public StringSE getBeanName()
null
であってはなりません。public void render(@Nullable MapSE<StringSE,?> model, HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
View
の render
model
- キーとして文字列名、値として対応するモデルオブジェクトを持つマップ (空のモデルの場合、マップは null
にすることもできます)request
- 現在の HTTP リクエスト response
- 彼が作成している HTTP レスポンス ExceptionSE
- レンダリングに失敗した場合 renderMergedOutputModel(java.util.Map<java.lang.String, java.lang.Object>, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
protected MapSE<StringSE,ObjectSE> createMergedOutputModel(@Nullable MapSE<StringSE,?> model, HttpServletRequestEE request, HttpServletResponseEE response)
null
)を作成します。動的な値は静的な属性よりも優先されます。protected RequestContext createRequestContext(HttpServletRequestEE request, HttpServletResponseEE response, MapSE<StringSE,ObjectSE> model)
デフォルトの実装では、指定されたリクエストとモデルの標準 RequestContext インスタンスが作成されます。カスタムインスタンスのサブクラスでオーバーライドできます。
request
- 現在の HTTP リクエスト model
- 静的な属性よりも動的な値が優先される、結合された出力マップ(非 null
)setRequestContextAttribute(java.lang.String)
, RequestContext
protected void prepareResponse(HttpServletRequestEE request, HttpServletResponseEE response)
デフォルトの実装では、HTTPS 経由でダウンロードコンテンツを送信するときに IE バグの回避策が適用されます。
request
- 現在の HTTP リクエスト response
- 現在の HTTP レスポンス protected boolean generatesDownloadContent()
デフォルトの実装は false
を返します。通常、レスポンス OutputStream を介して、クライアント側で一時キャッシュを必要とするダウンロードコンテンツを生成していることがわかっている場合、サブクラスはここで true
を返すことが推奨されます。
protected HttpServletRequestEE getRequestToExpose(HttpServletRequestEE originalRequest)
renderMergedOutputModel(java.util.Map<java.lang.String, java.lang.Object>, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
に公開するリクエストハンドル、つまりビューを取得します。デフォルトの実装は、Spring Bean の公開の元のリクエストをリクエスト属性としてラップします(リクエストされた場合)。
originalRequest
- エンジンによって提供される元のサーブレットリクエスト setExposeContextBeansAsAttributes(boolean)
, setExposedContextBeanNames(java.lang.String...)
, ContextExposingHttpServletRequest
protected abstract void renderMergedOutputModel(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
最初のステップは、リクエストの準備です。JSP の場合、これはモデルオブジェクトをリクエスト属性として設定することを意味します。2 番目のステップは、たとえば RequestDispatcher を介した JSP を含む、実際のビューのレンダリングです。
model
- 静的な属性よりも動的な値が優先される、結合された出力マップ(非 null
)request
- 現在の HTTP リクエスト response
- 現在の HTTP レスポンス ExceptionSE
- レンダリングに失敗した場合 protected void exposeModelAsRequestAttributes(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request) throws ExceptionSE
RequestDispatcher
EE が到達可能なすべてのリソースに適しています。model
- 公開するモデルオブジェクトのマップ request
- 現在の HTTP リクエスト ExceptionSE
protected ByteArrayOutputStreamSE createTemporaryOutputStream()
これは通常、コンテンツを実際に HTTP レスポンスに書き込む前に一時ストリームからコンテンツ長ヘッダーを設定するための IE の回避策として使用されます。
protected void writeToResponse(HttpServletResponseEE response, ByteArrayOutputStreamSE baos) throws IOExceptionSE
response
- 現在の HTTP レスポンス baos
- 書き込む一時的な OutputStreamIOExceptionSE
- 書き込み / フラッシュが失敗した場合 protected void setResponseContentType(HttpServletRequestEE request, HttpServletResponseEE response)
View.SELECTED_CONTENT_TYPE
リクエスト属性が存在し、具体的なメディア型に設定されていない限り、構成された content type
にレスポンスのコンテンツ型を設定します。public StringSE toString()
ObjectSE
の toStringSE
protected StringSE formatViewName()