`
yanglei008
  • 浏览: 84904 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring:bind 使用中一个 值追加 问题

阅读更多
在使用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);
)
分享到:
评论
1 楼 yanglei008 2008-09-26  



该问题是 setSessionForm(true)  就ok了...
把 bind的 对象放在session中...

相关推荐

    通过c++11的std::bind及std::function实现类方法回调,模拟Qt实现信号槽

    c++11引入了std::bind及std::function,实现了函数的存储和绑定,即先将可调用的对象保存起来,在需要的时候再调用。定义了SignalObject信号类和SlotObject槽类,其中信号类中的 std::function(int)&gt; _call就是要...

    C++ 11 std::function和std::bind使用详解

    C++ 11 std::function和std::bind使用详解 C++ 11 中引入了两个重要的功能:std::function 和 std::bind,它们都是基于 C++ 11 的新特性,用于实现函数指针的功能。下面将详细介绍这两个功能的使用和区别。 std::...

    springbind BindStatus

    Spring Bind 和 BindStatus 在 Spring MVC 中扮演着关键的角色,它们是数据绑定的核心组件,用于处理用户输入数据的验证和显示错误信息。在Web应用中,尤其是在处理表单提交时,Spring Bind 提供了一种结构化的机制...

    C++11中lambda、std::function和std:bind详解

    - `capture-list`:捕获列表,用于指定需要在lambda体内使用的外部变量,可以是值捕获(`[x]`)或引用捕获(`[&x]`)。 - `params`:参数列表,与普通函数类似,但不支持默认参数。 - `return-type`:返回类型,可由...

    SPRING信息

    本文将深入探讨`&lt;spring:bind&gt;`和`&lt;spring:message&gt;`这两个Spring MVC中的内置标签,以及它们在处理用户输入和显示国际化文本方面的功能。 1. `&lt;spring:bind&gt;`标签主要用于在JSP页面上绑定和显示模型对象及其属性的...

    docker:bind.tar

    docker:bind.tar

    c++ boost bind

    在"win32boostStl"这个文件夹中,可能包含了关于在Windows环境下使用Boost库,特别是`boost::bind`和STL容器(如vector, list, map等)结合使用的示例代码。通过学习这些示例,你可以掌握如何在实际项目中利用`boost...

    PHP PDOStatement::bindValue讲解

    PDOStatement::bindValue — 把一个值绑定到一个参数(PHP 5 &gt;= 5.1.0, PECL pdo &gt;= 0.1.0) 说明 语法 bool PDOStatement::bindValue ( mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] ) ...

    Linux下Socket编程的端口问题 ( Bind(): Address already in use ) PDF版

    在进行Linux下的网络编程时,经常会遇到端口绑定失败的问题,尤其是在使用`bind()`函数尝试绑定端口时,可能会收到“Address already in use”这样的错误提示。这种错误通常发生在开发阶段频繁启动和停止服务的情况...

    c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind

    而`std::bind`可以帮助我们将函数与特定的参数预先绑定,例如,如果我们有一个类`test`有一个成员函数`int operator()(int a)`,我们可以通过`std::bind(&test::operator(), &obj, _1)`来创建一个可调用对象,其中`_...

    cpp代码-std::bind & function

    例如,假设我们有一个接受两个参数的函数 `add(int a, int b)`,我们可以通过 `std::bind` 将第一个参数绑定为一个特定值,然后得到一个新的可调用对象,只接受一个参数 `b`: ```cpp #include int add(int a, ...

    jakarta.xml.bind-api-2.3.3-API文档-中文版.zip

    Maven坐标:jakarta.xml.bind:jakarta.xml.bind-api:2.3.3; 标签:bind、xml、api、jakarta、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...

    bind-9.11.4-26.P2.el7_9.8.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    解决jvmjava.net.BindException: Address already in use: JVM_Bind异常

    在本文中,我们将深入探讨这个问题的原因以及如何解决。 ### 异常原因 1. **端口被占用**:这是最常见的原因。Java应用程序通常通过配置文件(如Tomcat的`server.xml`)指定监听的端口,如8080。如果这个端口上...

    BIND9 中文手册

    11. **版本差异**:从bind-9.4到bind-9.6,每个新版本通常会引入新的功能、增强安全性和性能优化。例如,bind-9.6可能增加了对DNSSEC的更好支持和更多调试工具。 12. **学习资源**:中文手册提供了详细的文档,涵盖...

    zhiqiang-hu#AwesomeCppNotes#std::function和std::bind1

    在 &lt;functional&gt; 头文件中, std::function 是个可调用Callable对象的容器,可以容纳 函数、函数指针、lambda表达式、成员函

Global site tag (gtag.js) - Google Analytics