在使用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 中引入了两个重要的功能:std::function 和 std::bind,它们都是基于 C++ 11 的新特性,用于实现函数指针的功能。下面将详细介绍这两个功能的使用和区别。 std::...
Spring Bind 和 BindStatus 在 Spring MVC 中扮演着关键的角色,它们是数据绑定的核心组件,用于处理用户输入数据的验证和显示错误信息。在Web应用中,尤其是在处理表单提交时,Spring Bind 提供了一种结构化的机制...
- `capture-list`:捕获列表,用于指定需要在lambda体内使用的外部变量,可以是值捕获(`[x]`)或引用捕获(`[&x]`)。 - `params`:参数列表,与普通函数类似,但不支持默认参数。 - `return-type`:返回类型,可由...
本文将深入探讨`<spring:bind>`和`<spring:message>`这两个Spring MVC中的内置标签,以及它们在处理用户输入和显示国际化文本方面的功能。 1. `<spring:bind>`标签主要用于在JSP页面上绑定和显示模型对象及其属性的...
在Android开发过程中,网络通信是应用的重要组成部分,而使用UDP(User Datagram Protocol)进行数据传输时,可能会遇到`java.net.BindException: bind failed: EADDRINUSE`的问题。这个异常通常意味着应用程序尝试...
docker:bind.tar
在"win32boostStl"这个文件夹中,可能包含了关于在Windows环境下使用Boost库,特别是`boost::bind`和STL容器(如vector, list, map等)结合使用的示例代码。通过学习这些示例,你可以掌握如何在实际项目中利用`boost...
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 ] ) ...
在进行Linux下的网络编程时,经常会遇到端口绑定失败的问题,尤其是在使用`bind()`函数尝试绑定端口时,可能会收到“Address already in use”这样的错误提示。这种错误通常发生在开发阶段频繁启动和停止服务的情况...
而`std::bind`可以帮助我们将函数与特定的参数预先绑定,例如,如果我们有一个类`test`有一个成员函数`int operator()(int a)`,我们可以通过`std::bind(&test::operator(), &obj, _1)`来创建一个可调用对象,其中`_...
Maven坐标:jakarta.xml.bind:jakarta.xml.bind-api:2.3.3; 标签:bind、xml、api、jakarta、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...
例如,假设我们有一个接受两个参数的函数 `add(int a, int b)`,我们可以通过 `std::bind` 将第一个参数绑定为一个特定值,然后得到一个新的可调用对象,只接受一个参数 `b`: ```cpp #include int add(int a, ...
在本文中,我们将深入探讨这个问题的原因以及如何解决。 ### 异常原因 1. **端口被占用**:这是最常见的原因。Java应用程序通常通过配置文件(如Tomcat的`server.xml`)指定监听的端口,如8080。如果这个端口上...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
11. **版本差异**:从bind-9.4到bind-9.6,每个新版本通常会引入新的功能、增强安全性和性能优化。例如,bind-9.6可能增加了对DNSSEC的更好支持和更多调试工具。 12. **学习资源**:中文手册提供了详细的文档,涵盖...
Centos7 el7.x86_64 官方离线安装包,安装指令为 sudo rpm -ivh bind-libs-lite-9.11.4-26.P2.el7_9.16.x86_64.rpm