BeanNameViewResolver用法の[春MVC](カスタムビュー)

BeanNameViewResolver(カスタムビュー)

BeanNameViewResolverこのビューリゾルバ、返送用のカスタムビュー。名前が示すように、コントローラを構成することによって、カスタムビューを返すbean名カスタムビューを返すために、。

カスタムビュー
package org.views;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.View;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.Map;

@Component("myview")
public class MyView implements View {
    private static final String ContentType = "text/html;charset=utf-8";
	@Override
    public String getContentType() {
        return ContentType;
    }

    @Override
    public void render(Map<String, ?> map,
                       HttpServletRequest httpServletRequest,
                       HttpServletResponse response)
            throws Exception {

        response.setContentType(ContentType);
        PrintWriter writer = response.getWriter();
        map.forEach((k,v)->writer.println(k+" "+v));
        writer.println("<pre>this is bottom</pre>");
    }


}

分析:インタフェースを実装するView(または継承AbstractView)、この方法は、そのrenderサーブレットと実際にservice同様の方法で機能だけでなく、方法のレンダリングは、モデル(モデル)に導入しました。@Component("myview")ビューは、アセンブリフレームとして宣言され、BeanNameに設定されmyview、それはスケジューラ(のDispatcherServlet)タグコンポーネント定義されたビュー・パスに追加する必要があるため、構成ファイルをスキャンする、など

<context:component-scan base-package="org.spring;org.spring2;org.views"/>

上記は、コメントの仕方、カスタム構成ビューを使用することです。Aは、BeanNameコンフィギュレーションファイルに追加することができる、見ることができbean、同じ効果的に達成するために、

<bean name="myview" class="org.views.MyView"/>

最後に、それはインターフェースを実装思い出させる必要があり、我々が実装しなければならないメソッドを(さえ実現、そうでない場合は、ビューリゾルバは、未知の理由のために、このビューを返さない、方法を、体の種類に応じて設定されたこととは思わない、あなたは間違っています)そう測定抽象クラスの実装を推奨継承されたインタフェース、抽象クラス交換するインターフェイスを。ViewgetContentTypegetContentTypeAbstractViewViewAbstractViewView

package org.views;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.view.AbstractView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.Map;

@Component("myview")
public class MyView extends AbstractView {
    private static final String ContentType = "text/html;charset=utf-8";

    protected void renderMergedOutputModel(
            Map<String, Object> map,
            HttpServletRequest httpServletRequest,
            HttpServletResponse response
    ) throws Exception {
        response.setContentType(ContentType);
        PrintWriter writer = response.getWriter();
        map.forEach((k,v)->writer.println(k+" "+v));
        writer.println("<pre>this is bottom</pre>");
    }
}
コントローラ
package org.spring;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
public class HelloController {

    @RequestMapping(path = "/hello")
    public String execute(ModelMap modelMap) {
        modelMap.addAttribute(
                "testMessage",
                "<pre>hello huanghaifeng</pre>"
        );
        return "myview";
    }

}

分析:モデルは、プロパティを追加するには、その後、カスタムビューを返します。BeanName

プロファイル
 <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="viewResolvers">
            <list>
                <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                    <property name="prefix" value="/"/>
                    <property name="suffix" value=".jsp"/>
                </bean>
                <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
                    <property name="order" value="10"/>
                </bean>
            </list>
        </property>
    </bean>

ここでは、BeanNameViewResolverので、注文プロパティを初期化する必要がありInternalResourceViewResolver"、それが最終的にデフォルトのビューのチェーンに位置しています。

发布了52 篇原创文章 · 获赞 4 · 访问量 4591

おすすめ

転載: blog.csdn.net/qq_42777577/article/details/104266541