在使用spring:bind 配合 SimpleFormController时,出了一个让我困惑的问题:
获取Form表单的请求url是:
<a href="visitForm.htm?customerId=${contact.customerId}&contactId=${contact.id}&communicateMode=2">
${contact.businPhone}
</a>
在Controller中
public class VisitFormController extends BaseCrmFormController
{
protected Object formBackingObject( HttpServletRequest request) throws Exception {
CrmVisit visit = new CrmVisit();
if(request.getParameter( "id")!=null){//修改
int id=Integer.parseInt( request.getParameter( "id"));
visit = this.crmService.getVisit( id);
else{//新建
int customerId = ServletRequestUtils.getRequiredIntParameter( request,"customerId");
int communicateMode = ServletRequestUtils.getRequiredIntParameter( request,"communicateMode ");
int[] contactIds = ServletRequestUtils.getRequiredIntParameters( request,"contactId");
visit.setCustomerId( customerId);
visit.setCommunicateMode(communicateMode);
}
return visit;
}
protected void onBind( HttpServletRequest httpServletRequest, Object object, BindException bindException ) throws Exception
{
super.onBind( httpServletRequest, object, bindException );
}
protected ModelAndView onSubmit(
HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)
throws Exception {
CrmVisit visit = (CrmVisit)command;
this.crmService.saveVisit( visit);//持久化
return new ModelAndView( getSuccessView(),"visit",visit);
}
}
下面是Form.jsp片段
<form:form name=f1 method=post >
......
<td class="fieldnamecenter">沟通方式</td>
<td class="fieldvalue" colspan="2"><spring:bind path="command.communicateMode"
//...此段略 设定本地变量 communicateTypes代码...
<c:forEach items="${communicateTypes}" var="communicateType">
<input type="radio" name="${status.expression}" value="${communicateType.value}" <c:if test="${status.value == communicateType.value}">checked="checked"</c:if> />${communicateType.name}
</c:forEach>
</spring:bind>
</td>
......
</form:form>
此时如果提交后 发现
visit.communicateMode 的值 不是所期望的值.
因为之前第一个url 带有参数communicateMode=2 。而这个url又被自动传递给 form.jsp表单,作为这个表单 <form:form name=f1 ...>action的值得;并且,表单中又绑定了一个name=communicateMode单选框的。此时,spring的onbind(request,object) 会获取所有communicateMode参数的值,并以字符串追加形式 赋给visit.communicateMode...即 单选择框值为1时候 赋值 21 ;单选择框值为2时候 赋值 22;单选择框值为3时候 赋值 23 ...
解决办法:
偶目前就是直接把之前的url参数改个名,communicateMode 改成mode;
即:
<a href="visitForm.htm?customerId=${contact.customerId}&contactId=${contact.id}&mode=2">
${contact.businPhone}
</a>
不知道是不是有其他办法解决这种无意间的冲突...???
另:spring:bind + SimpleFormController
submit表单后 依然还是要走formBackingObject()方法走
(把 command 对象存储模式改为 session 即可...
this.setSessionForm( true);
)
分享到:
相关推荐
c++11引入了std::bind及std::function,实现了函数的存储和绑定,即先将可调用的对象保存起来,在需要的时候再调用。定义了SignalObject信号类和SlotObject槽类,其中信号类中的 std::function(int)> _call就是要...
主要介绍了C++ 11 std::function和std::bind使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
大家都知道C++11中增加了许多的新特性,下面在这篇文中我们就来聊一下lambda表达式,闭包,std::function以及std::bind。文中介绍的很详细,相信对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。
主要介绍了Android 中出现java.net.BindException: bind failed: EADDRINUSE 问题解决办法的相关资料,需要的朋友可以参考下
PDOStatement::bindValue — 把一个值绑定到一个参数(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 bool PDOStatement::bindValue ( mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] ) ...
Maven坐标:jakarta.xml.bind:jakarta.xml.bind-api:2.3.3; 标签:bind、xml、api、jakarta、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...
jQuery:bind() delegate() live()事件绑定
Linux Socket Bind() 成功解决socket编程中bind端口绑定的Error:Address already in use 错误。
主要介绍了c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
在 <functional> 头文件中, std::function 是个可调用Callable对象的容器,可以容纳 函数、函数指针、lambda表达式、成员函
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
bind-9.9.4-29.el7.x86_64.rpm rhel-server-7.2-x86_64 丢失文件的小伙伴可以下载来补全。。
Maven坐标:jakarta.xml.bind:jakarta.xml.bind-api:2.3.3; 标签:bind、xml、api、jakarta、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...
springweb bind param
cpp代码-std::bind & function
docker-bind:BIND名称服务器容器