3

Spring Webflowソースをダウンロードし、REST チャネル (データベースから画像を表示) をjsf-bookingサンプルに追加したいと考えました。このチャネルは、私のSpring-MVCサンプル アプリケーションでは問題なく動作していました。

ただし、指定されたアドレスでJSFハンドラーがdisplay.xhtmlファイルが存在しないというエラーメッセージで応答しているため、マッピングに問題があります(RESTリスナーがその要求を処理する必要があります)。

これは私がハンドラーを登録した方法です:

@Controller
@RequestMapping(value="/image")
public class ImageChannelImpl implements ImageChannel {

    @RequestMapping(value="/display.png", method=RequestMethod.GET)
    public void display(HttpServletResponse response) throws IOException {
(...)
        response.setContentType("image/png");
        ImageIO.write(img, "PNG", response.getOutputStream());
        response.getOutputStream().flush();     
        log.debug("display finished");
    }

}

ハンドラー マッピングをコピーしました。

<bean

    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <util:list id="beanList">
            <ref bean="stringHttpMessageConverter" />
            <ref bean="byteArrayHttpMessageConverter" />
        </util:list>
    </property>
</bean>

<bean id="stringHttpMessageConverter"
    class="org.springframework.http.converter.StringHttpMessageConverter" />

<bean id="byteArrayHttpMessageConverter"
    class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />

DispatcherServlet は /spring/* リクエストをリッスンしています。

<!-- The front controller of this Spring Web application, responsible for handling all application requests -->
<servlet>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value></param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

<!-- Map all /spring requests to the Dispatcher Servlet for handling -->
<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/spring/*</url-pattern>
</servlet-mapping>

したがって、画像はアドレス /spring/image/display.png で利用できると予想していましたが、REST ハンドラーはその要求を受け取っておらず、 /image/display.png も処理していません。

では、REST チャネルを登録できるようにするには、その構成で何を変更する必要があるのでしょうか? サンプルやドキュメント、Spring WebFlow と Spring MVC チャネルの両方を構成する方法をグーグルで検索しようとしましたが、何も見つかりませんでした。

4

1 に答える 1

1

FlowHandlerMappingの「デフォルトハンドラー」を定義する必要があります。

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
    <property name="flowRegistry" ref="flowRegistry"/>
    <property name="order" value="0"/>
    <!--If no flow match, map path to a view to render; e.g. the "/intro" path would map to the view named "intro" --> 
    <property name="defaultHandler" ref="requestMappingHandlerMapping"/>
</bean>

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" id="requestMappingHandlerMapping">
    <property name="order" value="1"/>
</bean>

Spring MVCのバージョンに応じて、RequestMappingHandlerMappingをAnnotationMethodHandlerAdapterに置き換えることができます(以前のSMVCリリースではRequestMappingHandlerMappingが推奨される方法です)

于 2013-01-22T16:22:48.603 に答える