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