spring mvcは繰り返し提出します.

2606 ワード

MARK:
Spring MVCはどうやって重複提出を防止しますか?Struts Tokenのような仕組み!
まず、SimpleFormControllerなどを継承したsession Formをtrueにする必要があります.このように、新しいフォームが表示されると、Springはsessionにcommandを保存しますが、フォームを提出する時にSpringはsessionからこのcommandを取り出し、その後すぐにsessionからcommandを保存したatributeを削除します.sessionにcommandがないと発見された場合、Springはそれを繰り返し提出したものと断定し、代わりにhandleInvalidSubmitを実行し、この方法をカバーして重複提出を防止する任務に当たる.
つまり、set Session Formの後に、先にフォームを表示したり、フォームを提出したりするプロセスがないと、フォームの繰り返し提出と見なされます.
http://www.blogjava.net/paulwong/archive/2012/02/20/370375.html

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;


public class FormControl extends SimpleFormController
{


	public FormControl()
	{
		super();
		this.setSessionForm(true);
	}

	@Override
	protected ModelAndView onSubmit(Object command) throws Exception
	{
		
		ModelAndView res = new ModelAndView("form","now",new Date());
		res.addObject("amwu", "28");
		
		return res;
	}

	@Override
	protected ModelAndView handleInvalidSubmit(HttpServletRequest request,
			HttpServletResponse response) throws Exception
	{
		System.out.println("handleInvalidSubmit(request, response)");
		return super.handleInvalidSubmit(request, response);
	}

	@Override
	protected Object formBackingObject(HttpServletRequest request)
			throws Exception
	{
		return request;
	}

	
	
}


<bean id="formControl" class="FormControl"></bean>
	<bean
		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/hello.html">springControl</prop>
				<prop key="/form.html">formControl</prop>
			</props>
		</property>
	</bean>
ネット上の例:
http://www.blogjava.net/liuwentao253/archive/2007/01/31/96982.html