• Struts中Action里对Form的运用理解


    public ActionForward custDetail(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response) {
            String forward 
    = "custDetail";
            CustInforForm custInforForm 
    = (CustInforForm) form;
            
    try {
                CustomerInfor customerInfor 
    = custInforForm.getCustomerInfor();
                
    if (!customerInfor.getCustomerId().equals("")) {
                    custInforForm.setCustomerInfor(customerInfor
                            .get(customerInfor.getCustomerId()));
                    custInforForm.setCheckboxSelect(customerInfor.getCustomerXxlx()
                            .split(
    ","));//这句中customerInfor.getCustomerXxlx为空
                }
            } 
    catch (ObjectPersistentException e) {
                logger.error(e.getMessage(), e);
                ActionErrors errors 
    = new ActionErrors();
                errors.add(ActionMessages.GLOBAL_MESSAGE, 
    new ActionError("error",
                        
    "查询失败:" + e.getMessage()));
                saveErrors(request, errors);
            }
            
    return mapping.findForward(forward);
        }


    原因:CustomerInfor customerInfor = custInforForm.getCustomerInfor()会生成一个对象,并将对象地址赋给CustomerInfor类中private接口类型变量(假设为A),同时将A作为函数返回值赋给customerInfor,此时A和customerInfor同时指向这个对象。
    custInforForm.setCustomerInfor(customerInfor.get(customerInfor.getCustomerId()));生成另一个对象,这个对象里各属性都有值,并将对象地址作为参数赋给Form里面的私有变量A,此时customerInfor仍然指向原来的对象,所以此时customerInfor里面没有CustomerXxlx的值

    根据这个原理上面代码customerInfor.getCustomerXxlx()应该改为custInforForm.getCustomerInfor().getCustomerXxlx();才能正常运行。或者把有属性值的对象重新赋给customerInfor.如下代码:

    代码
        public ActionForward custDetail(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response) {
            String forward 
    = "custDetail";
            CustInforForm custInforForm 
    = (CustInforForm) form;
            
    try {
                CustomerInfor customerInfor 
    = custInforForm.getCustomerInfor();
                
    if (!customerInfor.getCustomerId().equals("")) {
                    customerInfor 
    = customerInfor.get(customerInfor.getCustomerId());
                    custInforForm.setCustomerInfor(customerInfor);
                    custInforForm.setCheckboxSelect(customerInfor.getCustomerXxlx().split(
    ","));
                }
                
    // 在这里进行一条记录的查询操作!
            } catch (ObjectPersistentException e) {
                logger.error(e.getMessage(), e);
                ActionErrors errors 
    = new ActionErrors();
                errors.add(ActionMessages.GLOBAL_MESSAGE, 
    new ActionError("error",
                        
    "查询失败:" + e.getMessage()));
                saveErrors(request, errors);
            }
            
    return mapping.findForward(forward);
        }


     

  • 相关阅读:
    tabbar 旋转指定的页面
    GDAL中文路径不能打开&Shp文件字段属性值中文乱码
    Project : error PRJ0019: 工具从"Moc'ing xxx.h..."
    详解Android中的屏幕方向
    qt中获取文件路径和文件名
    vs2005下Qt项目中修改exe图标的方法
    Qt & C/C++统计运行时间
    Qt 中Treewidget添加右键菜单
    QT 中文乱码解决方案
    Qt多线程应用QRunnable显示进度条示例
  • 原文地址:https://www.cnblogs.com/xryyforver/p/1803807.html
Copyright © 2020-2023  润新知