1

代替の PDF ビューと通常の JSP ビューをコントローラーから提供したいと考えてContentNegotiatingViewResolverおり、XmlViewResolverこれを処理するために と を追加しました。Spring ドキュメントを含む、私が見つけたすべての例は単純なビュー名を返します。これはXmlViewResolver、views.xml ファイル内の Bean ID にマップされます (この場合、PDF を に書き込む Bean HttpResponse)。

ただし、InternalResourceViewResolver で定義された場所のサブフォルダーに整理された jsps があります。

例えば、

<bean id="viewResolver" class= "org.springframework.web.servlet.view.InternalResourceViewResolver"  p:order="2">          
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
 </bean>

したがって、コントローラー内から、/WEB-INF/pages/a/b/c.jsp にある JSP の「a/b/c」などのビュー名を返します。

これは、views.xml で 'a/b/c' として定義された Bean ID を持つことができないことを除いて、JSP では正常に機能します。有効な Bean ID ではありません。機能しない、または満足できないいくつかのオプションを調査しました。

  1. すべての JSP を 1 つのフォルダーに配置して、XmlViewResolver. これは機能しますが、JSP を編成するには理想的ではありません。
  2. 異なる接頭辞を使用した複数のInternalResourceViewResolver定義があります。これは機能しません。このタイプの最初のリゾルバーは、一致するビューが見つからない場合は null を返しません。例外で失敗するだけで、その後ViewResolversは使用されません。
  3. 別のコントローラー メソッド (または、要求されたコンテンツ タイプまたは URL サフィックスに応じてビュー名を返すコントローラー内の条件付きコード) を使用します。Controllerこれらの解決策は、その見解を無視し続けるという目的を無効にしているように見えます。
  4. locationXmlViewResolverのプロパティでワイルドカードを使用してみてください。これは例外で失敗します。

素敵なエレガントな解決策があると確信していますが、今は私を避けています。XmlViewResolver によって解決される可能性がある 'a/b/c' のようなビュー名を返すことができるような、より良いアプローチはありますか?

ご提案ありがとうございます。

リチャード

4

1 に答える 1

1

もちろん、bean エイリアスを使用するのが良い方法です...少し掘り下げた後:

XmlViewResolver の対象となる views.xml ファイル内:

<bean id="PdfView" class="com.blah.PdfDocView" /> 
<alias name="PdfView" alias="/a/b/structuredDocument"/>

「/a/b/structuredDocument」を PdfDocView Bean にマップします。

于 2012-11-02T00:38:37.583 に答える