public class UrlBasedViewResolver extends AbstractCachingViewResolver implements Ordered
ViewResolver
インターフェースのシンプルな実装。明示的なマッピング定義なしで、シンボリックビュー名を URL に直接解決できます。これは、シンボリック名がビューリソースの名前と簡単に一致する場合(つまり、シンボリック名がリソースのファイル名の一意の部分である場合)に役立ちます。各ビューに専用のマッピングを定義する必要はありません。InternalResourceView
や FreeMarkerView
などの AbstractUrlBasedView
サブクラスをサポートします。このリゾルバーによって生成されるすべてのビューのビュークラスは、"viewClass" プロパティで指定できます。
ビュー名は、それ自体がリソース URL であるか、指定されたプレフィックスやサフィックスによって拡張されます。RequestContext を保持する属性をすべてのビューにエクスポートすることは明示的にサポートされています。
サンプル: prefix="/WEB-INF/jsp/"、suffix=".jsp"、viewname="test" -> "/WEB-INF/jsp/test.jsp"
特別な機能として、リダイレクト URL は "redirect:" プレフィックスを使用して指定できます。例: "redirect:myAction" は、標準のビュー名として解決するのではなく、指定された URL へのリダイレクトをトリガーします。これは通常、フォームワークフローの終了後にコントローラー URL にリダイレクトするために使用されます。
さらに、転送 URL は "forward:" プレフィックスで指定できます。例: "forward:myAction" は、標準のビュー名として解決されるのではなく、指定された URL への転送をトリガーします。これは通常、コントローラー URL に使用されます。JSP URL に使用することは想定されていません。そこでは論理ビュー名を使用してください。
メモ: このクラスはローカライズされた解決をサポートしません。つまり、現在のロケールに応じて、シンボリックビュー名を別のリソースに解決します。
注意 : ViewResolvers をチェーンするとき、UrlBasedViewResolver は specified resource actually exists
かどうかをチェックします。ただし、InternalResourceView
では、ターゲットリソースの存在を事前に特定することは通常不可能です。このようなシナリオでは、UrlBasedViewResolver は常に、指定されたビュー名のビューを返します。結果として、チェーンの最後の ViewResolver として構成する必要があります。
setViewClass(java.lang.Class<?>)
, setPrefix(java.lang.String)
, setSuffix(java.lang.String)
, setRequestContextAttribute(java.lang.String)
, REDIRECT_URL_PREFIX
, AbstractUrlBasedView
, InternalResourceView
, FreeMarkerView
修飾子と型 | フィールドと説明 |
---|---|
static StringSE | FORWARD_URL_PREFIX 転送 URL を指定する特別なビュー名のプレフィックス(通常、フォームが送信および処理された後のコントローラーへ)。 |
static StringSE | REDIRECT_URL_PREFIX リダイレクト URL を指定する特別なビュー名のプレフィックス(通常は、フォームが送信および処理された後のコントローラーへ)。 |
DEFAULT_CACHE_LIMIT
logger
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
コンストラクターと説明 |
---|
UrlBasedViewResolver() |
修飾子と型 | メソッドと説明 |
---|---|
protected View | applyLifecycleMethods(StringSE viewName, AbstractUrlBasedView view) 含まれている ApplicationContext のライフサイクルメソッドを特定の View インスタンスに適用します(そのようなコンテキストが利用可能な場合)。 |
protected AbstractUrlBasedView | buildView(StringSE viewName) 指定されたビュークラスの新しい View インスタンスを作成して構成します。 |
protected boolean | canHandle(StringSE viewName, LocaleSE locale) この ViewResolver が指定されたビュー名を処理できるかどうかを示します。 |
protected View | createView(StringSE viewName, LocaleSE locale) "redirect:" プレフィックスのチェックを実装するためにオーバーライドされます。 |
MapSE<StringSE, ObjectSE> | getAttributesMap() 特定のエントリを追加または上書きするオプションを使用して、このリゾルバーによって返されるビューの静的属性へのマップアクセスを許可します。 |
protected ObjectSE | getCacheKey(StringSE viewName, LocaleSE locale) この ViewResolver はローカライズされた解決をサポートしていないため、この実装はビュー名のみを返します。 |
protected StringSE | getContentType() 存在する場合、すべてのビューのコンテンツ型を返します。 |
protected BooleanSE | getExposeContextBeansAsAttributes() |
protected StringSE[] | getExposedContextBeanNames() |
protected BooleanSE | getExposePathVariables() このリゾルバーによって解決されたビューがモデルにパス変数を追加する必要があるかどうかを返します。 |
int | getOrder() このオブジェクトの順序値を取得します。 |
protected StringSE | getPrefix() URL を構築するときにビュー名の前に付加されるプレフィックスを返します。 |
StringSE[] | getRedirectHosts() リダイレクトの目的で、構成されたアプリケーションホストを返します。 |
protected StringSE | getRequestContextAttribute() 存在する場合、すべてのビューの RequestContext 属性の名前を返します。 |
protected StringSE | getSuffix() URL を構築するときにビュー名に追加されるサフィックスを返します。 |
protected ClassSE<?> | getViewClass() ビューの作成に使用されるビュークラスを返します。 |
protected StringSE[] | getViewNames() この ViewResolver で処理できるビュー名(または名前パターン)を返します。 |
protected void | initApplicationContext() サブクラスは、カスタム初期化動作のためにこれをオーバーライドできます。 |
protected boolean | isRedirectContextRelative() スラッシュ("/")で始まる特定のリダイレクト URL を、現在の ServletContext を基準として解釈するかどうかを返します。 |
protected boolean | isRedirectHttp10Compatible() リダイレクトが HTTP 1.0 クライアントとの互換性を維持する必要があるかどうかを返します。 |
protected View | loadView(StringSE viewName, LocaleSE locale) 指定されたビュークラスの新しいインスタンスを作成するための buildView にデリゲートします。 |
protected ClassSE<?> | requiredViewClass() このリゾルバーに必要なビューの型を返します。 |
void | setAttributes(PropertiesSE props) このリゾルバーによって返されるすべてのビューに対して、 java.util.Properties オブジェクトから静的属性を設定します。 |
void | setAttributesMap(MapSE<StringSE,?> attributes) このリゾルバーによって返されるすべてのビューに対して、マップから静的属性を設定します。 |
void | setContentType(StringSE contentType) すべてのビューのコンテンツ型を設定します。 |
void | setExposeContextBeansAsAttributes(boolean exposeContextBeansAsAttributes) 属性がアクセスされたら、遅延チェックを通じて、アプリケーションコンテキスト内のすべての Spring Bean をリクエスト属性としてアクセス可能にするかどうかを設定します。 |
void | setExposedContextBeanNames(StringSE... exposedContextBeanNames) 公開することになっているコンテキスト内の Bean の名前を指定します。 |
void | setExposePathVariables(BooleanSE exposePathVariables) このリゾルバーによって解決されるビューがモデルにパス変数を追加するかどうかを指定します。 |
void | setOrder(int order) この ViewResolver Bean の順序値を指定します。 |
void | setPrefix(StringSE prefix) URL を作成するときに名前を表示するために付加されるプレフィックスを設定します。 |
void | setRedirectContextRelative(boolean redirectContextRelative) スラッシュ("/")で始まる所定のリダイレクト URL を、現在の ServletContext を基準として解釈するかどうかを設定します。 |
void | setRedirectHosts(StringSE... redirectHosts) アプリケーションに関連付けられた 1 つ以上のホストを構成します。 |
void | setRedirectHttp10Compatible(boolean redirectHttp10Compatible) リダイレクトが HTTP 1.0 クライアントとの互換性を維持するかどうかを設定します。 |
void | setRequestContextAttribute(StringSE requestContextAttribute) すべてのビューの RequestContext 属性の名前を設定します。 |
void | setSuffix(StringSE suffix) URL を作成するときにビュー名に追加されるサフィックスを設定します。 |
void | setViewClass(ClassSE<?> viewClass) ビューの作成に使用するビュークラスを設定します。 |
void | setViewNames(StringSE... viewNames) この ViewResolver で処理できるビュー名(または名前パターン)を設定します。 |
clearCache, getCacheLimit, isCache, isCacheUnresolved, removeFromCache, resolveViewName, setCache, setCacheLimit, setCacheUnresolved
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext
getApplicationContext, getMessageSourceAccessor, obtainApplicationContext, requiredContextClass, setApplicationContext
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static final StringSE REDIRECT_URL_PREFIX
public void setViewClass(@Nullable ClassSE<?> viewClass)
viewClass
- 必要なビュークラスに割り当て可能なクラス (デフォルトでは、AbstractUrlBasedView)AbstractUrlBasedView
protected ClassSE<?> requiredViewClass()
AbstractUrlBasedView
protected StringSE getPrefix()
protected StringSE getSuffix()
public void setContentType(@Nullable StringSE contentType)
ビュー自体がコンテンツ型を設定すると想定される場合、ビュークラスによって無視される場合があります。JSP の場合。
public void setRedirectContextRelative(boolean redirectContextRelative)
デフォルトは「true」: スラッシュで始まるリダイレクト URL は、Web アプリケーションのルートを基準にして解釈されます。つまり、コンテキストパスが URL の前に付加されます。
リダイレクト URL は、"redirect:" プレフィックスを使用して指定できます。例: "redirect:myAction"
protected boolean isRedirectContextRelative()
public void setRedirectHttp10Compatible(boolean redirectHttp10Compatible)
デフォルトの実装では、これにより HTTP ステータスコード 302 が強制されます。つまり、HttpServletResponse.sendRedirect
に委譲されます。これをオフにすると、HTTP 1.1 クライアントの正しいコードである HTTP ステータスコード 303 が送信されますが、HTTP 1.0 クライアントでは認識されません。
多くの HTTP 1.1 クライアントは、302 を 303 のように扱い、違いはありません。ただし、POST リクエストの後でリダイレクトする場合、一部のクライアントは 303 に依存します。このようなシナリオでは、このフラグをオフにしてください。
リダイレクト URL は、"redirect:" プレフィックスを使用して指定できます。例: "redirect:myAction"
protected boolean isRedirectHttp10Compatible()
public void setRedirectHosts(@Nullable StringSE... redirectHosts)
実際、このプロパティは、ホストがあり、そのホストが既知のホストとしてリストされていない URL に対して、HttpServletResponse.encodeRedirectURL(java.lang.String)
EE を介したリダイレクトでエンコーディングをオフにする方法を提供します。
設定されていない場合(デフォルト)、すべての URL がレスポンスを通じてエンコードされます。
redirectHosts
- 1 つ以上のアプリケーションホスト @Nullable public StringSE[] getRedirectHosts()
public void setRequestContextAttribute(@Nullable StringSE requestContextAttribute)
requestContextAttribute
- RequestContext 属性の名前 AbstractView.setRequestContextAttribute(java.lang.String)
@Nullable protected StringSE getRequestContextAttribute()
public void setAttributes(PropertiesSE props)
java.util.Properties
オブジェクトから静的属性を設定します。これは、静的属性を設定する最も便利な方法です。同じ名前の値がモデルに含まれている場合、静的属性は動的属性によってオーバーライドされることに注意してください。
文字列 "value" (PropertiesEditor で解析)または XML Bean 定義の "props" 要素を入力できます。
public void setAttributesMap(@Nullable MapSE<StringSE,?> attributes)
XML Bean 定義の「マップ」または "props" 要素を取り込むことができます。
attributes
- キーとして名前文字列、値として属性オブジェクトを持つマップ AbstractView.setAttributesMap(java.util.Map<java.lang.String, ?>)
public MapSE<StringSE,ObjectSE> getAttributesMap()
たとえば、"attributesMap [myKey]" を介してエントリを直接指定するのに便利です。これは、子ビュー定義のエントリを追加または上書きする場合に特に便利です。
public void setExposePathVariables(@Nullable BooleanSE exposePathVariables)
> デフォルト設定では、各ビューが決定するようになっています(AbstractView.setExposePathVariables(boolean)
を参照)。ただし、このプロパティを使用して、それを上書きできます。
exposePathVariables
-true
- このリゾルバーによって解決されたすべてのビューはパス変数を公開します false
- このリゾルバーによって解決されたビューはパス変数を公開しません null
- 個々のビューは自分で決めることができます (これはデフォルトで使用されます)AbstractView.setExposePathVariables(boolean)
@Nullable protected BooleanSE getExposePathVariables()
public void setExposeContextBeansAsAttributes(boolean exposeContextBeansAsAttributes)
これにより、JSTL の c:out
値式と同様に、JSP 2.0 ページのプレーンな ${...}
式でそのようなすべての Bean にアクセスできるようになります。
デフォルトは「false」。
public void setExposedContextBeanNames(@Nullable StringSE... exposedContextBeanNames)
public void setViewNames(@Nullable StringSE... viewNames)
ViewResolver
で処理できるビュー名 (または名前パターン) を設定します。ビュー名には単純なワイルドカードを含めることができます。たとえば、"my*"、"*Report"、"*Repo*" はすべてビュー名 "myReport" と一致します。@Nullable protected StringSE[] getViewNames()
ViewResolver
で処理できるビュー名(または名前パターン)を返します。public void setOrder(int order)
デフォルト値は Ordered.LOWEST_PRECEDENCE
で、順序なしを意味します。
Ordered.getOrder()
public int getOrder()
Ordered
値が高いほど、優先度は低くなります。結果として、最も低い値を持つオブジェクトが最高の優先度を持ちます(サーブレット load-on-startup
の値に多少似ています)。
同じ順序の値は、影響を受けるオブジェクトの任意のソート位置になります。
Ordered
の getOrder
Ordered.HIGHEST_PRECEDENCE
, Ordered.LOWEST_PRECEDENCE
protected void initApplicationContext()
ApplicationObjectSupport
デフォルトの実装は空です。ApplicationObjectSupport.initApplicationContext(org.springframework.context.ApplicationContext)
によって呼び出されます。
protected ObjectSE getCacheKey(StringSE viewName, LocaleSE locale)
AbstractCachingViewResolver
の getCacheKey
protected View createView(StringSE viewName, LocaleSE locale) throws ExceptionSE
loadView
では不可能です。サブクラスでオーバーライドされた loadView
バージョンは、常に必要なビュークラスのインスタンスを作成するスーパークラスに依存している可能性があるためです。
AbstractCachingViewResolver
の createView
viewName
- 取得するビューの名前 locale
- ビューを取得するロケール null
(ViewResolver チェーニングを可能にするオプション)ExceptionSE
- ビューを解決できなかった場合 loadView(java.lang.String, java.util.Locale)
, requiredViewClass()
protected boolean canHandle(StringSE viewName, LocaleSE locale)
ViewResolver
が指定されたビュー名を処理できるかどうかを示します。そうでない場合、createView(String, java.util.Locale)
は null
を返します。デフォルトの実装では、構成された view names
をチェックします。viewName
- 取得するビューの名前 locale
- ビューを取得するロケール PatternMatchUtils.simpleMatch(String, String)
protected View loadView(StringSE viewName, LocaleSE locale) throws ExceptionSE
buildView
にデリゲートします。次の Spring ライフサイクルメソッドを適用します(一般的な Spring Bean ファクトリでサポートされています)。setApplicationContext
afterPropertiesSet
AbstractCachingViewResolver
の loadView
viewName
- 取得するビューの名前 locale
- ビューを取得するロケール ExceptionSE
- ビューを解決できなかった場合 buildView(String)
, ApplicationContextAware.setApplicationContext(org.springframework.context.ApplicationContext)
, InitializingBean.afterPropertiesSet()
protected AbstractUrlBasedView buildView(StringSE viewName) throws ExceptionSE
Bean コンテナーで定義されている Spring ライフサイクルメソッドをここで呼び出す必要はありません。これらは、このメソッドが戻った後に loadView
メソッドによって適用されます。
サブクラスは通常、super.buildView(viewName)
を最初に呼び出してから、さらにプロパティを設定します。loadView
は、このプロセスの最後に Spring ライフサイクルメソッドを適用します。
viewName
- 構築するビューの名前 ExceptionSE
- ビューを解決できなかった場合 loadView(String, java.util.Locale)
protected View applyLifecycleMethods(StringSE viewName, AbstractUrlBasedView view)
ApplicationContext
のライフサイクルメソッドを特定の View
インスタンスに適用します(そのようなコンテキストが利用可能な場合)。viewName
- ビューの名前 view
- AbstractUrlBasedView
のプロパティで事前設定された、新しく作成された View インスタンス View
インスタンス (オリジナルまたは装飾されたバリアントのいずれか)ApplicationObjectSupport.getApplicationContext()
, ApplicationContext.getAutowireCapableBeanFactory()
, AutowireCapableBeanFactory.initializeBean(java.lang.Object, java.lang.String)