私は次のようなハンドラーを備えたSpringMVCコントローラーを持っています:
@RequestMapping(value = "/account/login", method = RequestMethod.GET)
public String login() {
return "login";
}
@RequestMapping(value = "/account/login", method = RequestMethod.POST, params = "login")
public String login(@RequestParam(value = "username") String username,
@RequestParam(value = "password") String password) {
// do authentication
return "home";
}
login.htmlページのフォームはaccount/login(同じURL)にPOSTします。認証後、ユーザーをアプリケーションのホームページにリダイレクトして、ユーザーがのwww.mywebappexample.com
代わりにアドレスバーに表示されるようにしますwww.mywebappexample.com/account/login
。loginメソッドから文字列を返すと、適切なhtmlがレンダリングされますが、表示したいURLがありません。どうすればリダイレクトできますか?
編集:コントローラーの戻り文字列の前に。を付ける必要がありましたredirect:
。これは、 UrlBasedViewResolverUrlBasedViewResolverをサブクラス化するビューリゾルバーがある場合に機能します。Thymeleafのビューリゾルバーはそれを行いませんが、動作は-> ThymeleafViewResolverです。これが私のservlet-context.xmlです(私はthymeleafを使用しています):
<bean id="templateResolver"
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"/>
</bean>
<bean id="viewResolver" class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine"/>
<property name="order" value="1"/>
</bean>