精华内容
下载资源
问答
  •  修改取消,返回列表页面时,查询条件中带回值。弄了一上午都没有找出来是什么原因,首先知道肯定是Action中变量作用域问题,但是没有解决方案! 后来一个同事一句话点醒了我,说你是不是更改了人家...
    我们这次工作的项目用到的是传统的SSH框架,同时没有采用注解的方式进 行开发,都是纯手工的xml配置文件。原来都是仿造已经配好的一条线配置文件,Action、manage、service、entity每一层都加一个 配置文件。但是今天遇到了一个bug,费了好长时间才找到什么问题。

    在项目中对养老金表的增删改操作都是用一个action,这个 action有add、update、delete、save方法,添加和修改是共用一个页面,当页面得到id时代表进行的更新操作,反之添加操作。今天 这些功能基本上都实现了,但是当我点击修改的时候,返回去再点添加,发现修改的回显数据出现在添加里,也就是说添加的时候还是显示上一次的访问记录。出现 问题,首先把问题的根源定位在Action变量作用域上,找了很长时间都不知道是哪出的问题?后来想,我是不是在哪更改了Action的作用域?如果我要 更改的话,我会去哪改?一拍脑袋,想起来了,在配置养老金Action配置文件时,没有添加 scope="prototype" 属性。在配置文件中添加 scope="prototype"就好了!

    后来,反思了一下,为什么这一个小小问题,自己需要解决那么长时间?主要的原因还是对原理不清楚,对Scope 的作用不了解! 下面就来学习一下什么是scope?在框架中起到什么作用?

    Scope 是作用域的意思,一段程序中一个变量的名称并不是什么时候都有效的,它只在某个范围内有效,限定这个变量在哪段范围内有效。

    Scope ="prototype" 代表会在该类型的对象被请求时创建一个新的action对象。如果没有配置,则不会在添加的时候新建一个action,会保留上一次访问过的记录信息。 如果没有配置,默认是scope="singleton" singleton模式指的是对某个对象的完全共享,如果一个类是singleton的,假如这个类有成员变量,那么这个成员变量的值是各个线程共享的, 类似于static.当线程A给变量付了一个值以后,线程B就能读出这个值。因此对于前台Action,肯定不能使用singleton模式,必须是一个 线程请求对应一个独立的实例。

    在web状态下中,请求时多线程的,全局变量可能会被不同的线程修改,尤其在并发时会带来意想不到bug。而在开发时,访问量小,不存在并发、多线程的问题,程序员极有可能忽视这个问题。例如这次我就犯了这么个错误。。。。

    所 以在配置action时,应使用scope="prototype",为每一次request创建一个新的action实例,这符合struts2的要 求,struts2为每一个request创建一个新的action实例。当request结束,bean就会被jvm销毁,作为垃圾收回。例如,添加、 修改、查询和删除虽然都是对应一个action。但是每次的请求应该都是一个全新的实例。这样也就不会出现上面我出现的那个问题了。

    当然,也可以设置scope="session",也能避免web中action并发问题,但是它代表只为当前用户创建一次bean,直至session消失。这种情况下,对当前用户而言,bean是有状态的,好处是可以少创建bean的实例。

    展开全文
  • 提供基本属性的实现域基类 支持透明审核(创建,最后更改) 集成自定义存储库代码可能性 Easy Spring与自定义名称空间集成 实施方案 根据主键获取单个实体 根据条件获取实体列表 保存新单个实体并返回主键 ...
  • VB控件属性使用大全

    2011-12-15 12:02:34
    (3)在列表框中找到需要添加控件名称,单击控件名称左侧复选框; (4)使用同样方法选择需要添加其它控件; (5)单击“确定”按钮,即可将所选ActiveX控件添加到工具箱里。 窗体(FORM)常用属性 属性 ...
  •  平常操作对象大都是简单对象,这里说简单是指它只具备对象属性及对象行为这种单一功能(还有些只是数据填充器),如获取一个客户信息,我们只返回包装了客户信息数据实体就可以,而要获取列表,只需要返回List...

      如标题,这里说的是CSLA框架中业务对象的分类,刚开始看到时很不理解,为什么对象还要分类呢,先来以相反的方向描述下平时大家(或者说是我的知识范围内)所应用的方法。

      平常操作对象大都是简单的对象,这里说简单是指它只具备对象属性及对象行为这种单一功能(还有些只是数据填充器),如获取一个客户信息,我们只返回包装了客户信息数据的实体就可以,而要获取列表,只需要返回List<T>的列表,不管客户端怎样使用,对比CSLA的业务对象,它们缺乏了足够的智能性,也就是各自的职责。或者许说在使用linq2sql或者entity framework,它们有一定的智能性,可以在上下文中跟踪实体状态,以及方便的操作对象之间的关系,我也感觉它们与CSLA之间有共性,但对于一个ORM来说或许它们的责任就是以对象的形式封装数据操作,对于更多的职责来说应用起来还真有点不爽(个人感觉~)。下面就几类业务对象发表下自己的使用看法。

      从使用角度来说,对于可编辑对象可以说是使用最广的业务对象之一,从名称中就可看得出它的职责是编辑对象信息,这里还要分根对象与子对象,对于不同级别的对象它们的操作也是不同,以根对象为例,根对象有责任编写代码从持久化里面获取对象信息以及填充属性值,而向用户暴露的属性是经过了包装过的,包装了什么呢?数据验证,身份验证,错误跟踪,撤销跟踪,状态跟踪等,客户去操作对象时在对象背后这些功能都在运转,这也是根对象的几项主要功能,框架中向开发人员开放了如AddBusinessRules类似的方法来统一管理如验证信息、权限信息,对于属性的的getter,setter来说,在2.0的版本中显得更直接,而在现在的版本中这些工作都封装在了基类中。刚才说到子编辑对象,它的职责对于根对象来说大都相同,但它并不对当前对象的数据获取作操作,而是接收来自上层对象提供的现成数据,所以它没有DataProtal_Method这种方法,它只是提供数据操作的局部方法而已,在例子中看到甚至这些数据操作方法也是由父对象来操作的。遇到的一个问题就是对象状态跟踪的准确性,特别是对于对象初始化时属性的赋值,它必须在对象内部完成,以前我们喜欢new完一个对象后再为对象默认属性赋值,因为它们没有状态,而在这里如果后期更新属性的话对象内部已经对它进行了跟踪,对于撤销操作就会有效了,所以这块需要注意一下...

      个人比较喜欢的另一个对象类型是只读业务对象列表,它是一个列表类型,所以会对应一个只读对象子类型作为它的具体信息,这种列表业务类主要是对数据的获取以及填充列表项工作,其他的都是业务方法了,它不会跟踪对象状态(也没必要~),也没有撤销等功能,所以性能会比较好,对于只读列表绑定感觉它比较适合。这里对于频繁使用的并且更新速度慢的数据使用静态缓存感觉会比较好。

      键值对,这个在平常用的也不少,在这里好像它与只读对象列表差不多,只是简化了类型和增加了几个基础查询方法。对于简单的数据还挺方便,好像这种数据更新速度更慢,应用缓存也是很不错,同样它只负责对象加载工作,并没有可编辑对象那么复杂,或者它是最简单的一个业务对象吧,因为对于列表对象可能会有复杂的业务方法。

      Command对象,这个业务对象应该是最灵活,也是非常重要的一个业务对象,它的结构非常简单,但可以实现的非常复杂,我感觉这类对象让框架变的灵活的多。

      这里所说的父、子关系,父对象并非就是根对象,这点需要搞清楚。除上面提到的几种对象外还有其他的变种形式,主要还是根据父子关系的变形,不过也很好理解。

      自己感觉很好的应用这些业务对象来进行实际开发有一定难度,主要原因不是因为它不好,也不是因为它难,而是从根本上,也就是自己的面向对象水平还有对象设计上还有差距,如果看过DDD就会发现,它们的思路有很多共性,或许它们都是面向对象的具体体现,无论是从对于对象概念还是从对象关系处理,以及从对象职责的角度,所以自己感觉提高思想的水平是学习和应用它们的基础,这里是在了解业务领域的前提下单纯说业务对象的设计,所以与特定领域知识还是息息相关的。

      脑门突然闪过一道光,在DDD中看到的,自己也感觉很有道理,也适合于CSLA的应用,就是这种框架的应用不是为了提高响应速度,或者说它应该是在响应速度不是最主要目的的情况下应用的框架。

      这就是今天想到的,下次继续。
      [ 附个个人广告:北京有招人的公司吗?工龄1.5年,C#,谢谢!QQ:496195435. ]

    转载于:https://www.cnblogs.com/quluqi/archive/2010/07/06/1771947.html

    展开全文
  • 我该选择什么版本 Kohana? ■ Kohana2.x和3.x区别以及你该如何选择正确版本 安装和配置 Kohana3.0 ■从 Github安装 设置生产环境 去除 index.php 如何使用控制器和视图 如何创建和使用控制器 如何创建和使用...
  • //设置联想输入下拉列表提示框的位置 var tr,td,text; for (var i = 0; i ; i++) {//根据返回的值,手动的拼tbody的内容 text = document.createTextNode(data[i].linkDataProperty);//从Action中返回的数据中...
  • 小程序上拉加载

    2020-12-21 08:31:26
    不论是小程序还是别前端框架,都会有上来加载和下拉刷新问题,只要清楚什么时候请求数据和请求返回的几种情况,就会变得简单了。微信在小程序官方文档中组件视图容器中,给我们提供了一个scroll-viwe 有很多...

    不论是小程序还是别的前端框架,都会有上来加载和下拉刷新的问题,只要清楚什么时候请求数据和请求返回的几种情况,就会变得简单了。微信在小程序的官方文档中组件的视图容器中,给我们提供了一个scroll-viwe 有很多属性方法方便我们使用。

    一、首先,固定一个包含列表数据的view高度,让它里面的列表数据溢出后可以滚动:

     <scroll-view scroll-y lower-threshold="100" bindscrolltolower="scrollToLower" style="height: 100vh;">
        <view wx:for="{{listData}}" wx:key="{{index}}" style="height: 40px;line-height: 40px;border-bottom: 1px solid #f4f4f4;">
          Item{{item}}
        </view>
      </scroll-view>
    

    二、列表的数据请求会分成两种情况:一种是初始化页面加载的第一页的数据;另一种是滚动到底部请求的下一页的数据。我们在请求的时候要分成两种情况,如果第一页,isPage = false,那么下一页的数据isPage = true:

    //请求数据
      getData(isPage) {
        console.log("需要拼接数据:", Network.pageData);
        let params = {
          pageNum: this.data.pageNo,
          pageSize: 30
        }
        //请求
        Network.pageData(params,(res,err)=>{
          if (isPage) {
              //下一页的数据拼接在原有数据后面
              this.setData({
                listData: this.data.listData.concat(res.result)
              })
            } else {
              //第一页数据直接赋值
              this.setData({
                listData: res.result
              })
            }
        })
      },
    

    三、在第一步中古固定的高度view,它在往上滚动的时候,滚动到一定的位置就开始请求下一页的数据。这里设置了当view距离底部还有100px时,触发请求下一页的数据

    //到达底部
      scrollToLower: function (e) {
          this.setData({
            pageNo: this.data.pageNo + 1
          })
          this.getData(true);
      },
    

    这就是基本的上拉加载,但是上面几步会有些问题,下面给出解决方法

    1、滚动到离底部<100px之后,继续往下滚动就会一直发起请求,我们需要在view距离底部还有100px时,设置一个全局变量loding,告诉大家我已经发起请求了,等我请求返回的数据展示的页面之后在发其请求。将第三步的代码改成:

    //到达底部
      scrollToLower: function (e) {
        if (!this.data.loading){
          this.setData({
            loading: true,
            pageNo: this.data.pageNo + 1
          })
          this.getData(true);
        }
      },
    

    将第二步的代码改为:

    //请求数据
      getData(isPage) {
        console.log("需要拼接数据:", Network.pageData);
        let params = {
          pageNum: this.data.pageNo,
          pageSize: 30
        }
        //请求
        Network.pageData(params,(res,err)=>{
          this.setData({
            loading: false
          })
          if (isPage) {
              //下一页的数据拼接在原有数据后面
              this.setData({
                listData: this.data.listData.concat(res.result)
              })
            } else {
              //第一页数据直接赋值
              this.setData({
                listData: res.result
              })
            }
        })
      },
    

    2、如果最后一页的数据都请求完了,在继续往下滚动还会发起请求。设置一个全局变量noMore,当请求返回的数组长度为0时,滚动到底部就不用再发起请求了。将第三步的代码改为:

    //到达底部
      scrollToLower: function (e) {
        if (!this.data.loading && !this.data.noMore){
          this.setData({
            loading: true,
            pageNo: this.data.pageNo + 1
          })
          this.getData(true);
        }
      },
    

    将第二步改为:

    //请求数据
      getData(isPage) {
        console.log("需要拼接数据:", Network.pageData);
        let params = {
          pageNum: this.data.pageNo,
          pageSize: 30
        }
        //请求
        Network.pageData(params,(res,err)=>{
          this.setData({
            loading: false
          })
           if (isPage) {
              //下一页的数据拼接在原有数据后面
              this.setData({
                listData: this.data.listData.concat(res.result)
              })
            } else {
              //第一页数据直接赋值
              this.setData({
                listData: res.result
              })
            }
            //如果返回的数据为空,那么就没有下一页了
            if (res.result.length == 0) {
              this.setData({
                noMore: true
              })
            }
        })
      },
    

    在接下来完善请求失败的情况,将第二步的代码改成:

    //请求数据
      getData(isPage) {
        console.log("需要拼接数据:", Network.pageData);
        let params = {
          pageNum: this.data.pageNo,
          pageSize: 30
        }
        //请求
        Network.pageData(params,(res,err)=>{
          this.setData({
            loading: false
          })
          if (err) {//返回失败
            this.setData({
              loadingFailed: true
            })
            return false;
          }
          if (res.code == 0) {
            if (isPage) {
              //下一页的数据拼接在原有数据后面
              this.setData({
                listData: this.data.listData.concat(res.result)
              })
            } else {
              //第一页数据直接赋值
              this.setData({
                listData: res.result
              })
            }
            //如果返回的数据为空,那么就没有下一页了
            if (res.result.length == 0) {
              this.setData({
                noMore: true
              })
            }
          } else {
            //返回失败
            this.setData({
              loadingFailed: true
            })
          }
        })
      },
    

    将html的代码改成

      <scroll-view scroll-y lower-threshold="100" bindscrolltolower="scrollToLower" style="height: 100vh;">
        <view wx:for="{{listData}}" wx:key="{{index}}" style="height: 40px;line-height: 40px;border-bottom: 1px solid #f4f4f4;">
          Item{{item}}
        </view>
        <view style="text-align: center;margin: 10px;">
          <view wx:if="{{loading}}">加载中...</view>
          <view wx:if="{{noMore}}">没有更多了</view>
          <view wx:if="{{loadingFailed}}">数据加载失败,请重试</view>
        </view>
      </scroll-view>
    
    展开全文
  • CTLCOLOR_LISTBOX 列表框 CTLCOLOR_MSGBOX 消息框 CTLCOLOR_SCROLLBAR 滚动条 CTLCOLOR_STATIC 静态控件 表2 nCtlColor类型值与含义 作为一个简单例子,观察以下代码: BOOL CUi5Dlg::OnInitDialog() { /...
  • 当应用程序在对象上调用了一个需要花费很长时间来执行方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 20、abstract class和interface有什么区别? ...
  • javascript函数解释

    2011-02-26 11:03:52
    34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有时用下拉列表框名称加上.selectedIndex来确定被选中的值) 35.字符串的定义:var myString = new String("This is lightsword"); 36.字符串转成...
  • LINGO软件学习

    2009-08-08 22:36:50
    在attribute_ list可以指定一个或多个集成员的属性属性之间必须用逗号隔开。 可以把集、集成员和集属性同C语言中结构体作个类比。如下图: 集 ←→ 结构体 集成员 ←→ 结构体域 集属性 ←→ 结构体实例 LINGO...
  • 7.5.5 重载容易引发误解两个地方——返回类型和形参名 170 7.5.6 重载中最难点——参数匹配原则 171 7.6 使用类实例作为方法参数 172 7.6.1 超车方法:使用类实例做参数 172 7.6.2 调用这个方法 173 ...
  • 7.5.5 重载容易引发误解两个地方——返回类型和形参名 170 7.5.6 重载中最难点——参数匹配原则 171 7.6 使用类实例作为方法参数 172 7.6.1 超车方法:使用类实例做参数 172 7.6.2 调用这个方法 173 ...
  • 7.5.5 重载容易引发误解两个地方——返回类型和形参名 170 7.5.6 重载中最难点——参数匹配原则 171 7.6 使用类实例作为方法参数 172 7.6.1 超车方法:使用类实例做参数 172 7.6.2 调用这个方法 173 ...
  • 11.我们双击文件列表的dialog.ui 文件,便出现了下面所示图形界面编辑界 面。 12.我们在右边器件栏里找到Label 标签器件 13.按着鼠标左键将其拖到设计窗口上,如下图。 14.我们双击它,并将其内容改为helloworld...
  • html入门到放弃笔记

    2018-05-15 15:06:12
    1、创建一个 div 标记 ,增加属性 ,设置 align 属性的值为 center ,设置 id 属性的值为 container,设置 title 属性的值为 这是一个div 这是一个div"> 四大标准属性: 1、id :定义元素在页面中独一无二...
  • 4.4 我同意条款——CheckBoxisChecked属性 4.5 消费券采购列表——多选项CheckBox应用 4.6 向左或向右——RadioGroup组与onCheckedChanged事件 4.7 专业相框设计——ImageView堆栈应用 4.8 自定义下拉菜单模式...
  • 5.4.9 通过name属性返回指定对象 5.4.10 获取特定属性取值 5.4.11 设置特定属性取值 5.4.12 删除特定属性 5.5 附加节点处理方法 5.5.1 生成节点 5.5.2 插入和添加节点 5.5.3 复制节点 5.5.4 删除和替换节点 ...
  • 5.4.9 通过name属性返回指定对象 5.4.10 获取特定属性取值 5.4.11 设置特定属性取值 5.4.12 删除特定属性 5.5 附加节点处理方法 5.5.1 生成节点 5.5.2 插入和添加节点 5.5.3 复制节点 5.5.4 删除和替换节点 ...
  • JavaScript基础和实例代码

    热门讨论 2009-03-20 16:49:30
    5.4.9 通过name属性返回指定对象 5.4.10 获取特定属性取值 5.4.11 设置特定属性取值 5.4.12 删除特定属性 5.5 附加节点处理方法 5.5.1 生成节点 5.5.2 插入和添加节点 5.5.3 复制节点 5.5.4 删除和替换节点 ...
  • flash shiti

    2014-03-14 10:32:41
    添加列表框 □ B. 使用Value(值)对话框添加项目 □ C. 添加下拉菜单 □ D. 给组合框添加项目 4. Library 中有一元件Symbol 1,舞台上有一个该元件实例。现通过实例属性检查器将该实 例颜色改为#FF0033,透明...
  • 图书管理系统毕业设计+源码-java

    千次下载 热门讨论 2012-05-06 13:45:09
    单击下一步,出现一个新对话框是选择添加一些控件到窗体中,在这里什么都不选,直接单击下一步,来到窗体是设置生成文件类型,这里将文件类型设置为 EXE file-allows your program to be started directly ...
  • asp.net知识库

    2015-06-18 08:45:45
    在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标放在一个连接上,会显示图片(类似tooltip) 使用microsoft.web.ui.webcontrols的TabStrip与IFame组件,达到页的切换效果 HttpModule 实现 ASP.Net (*....
  • 列表框ClistBox项目宽度超过了其自身窗口宽度时如何显示提示条 在给CComboBox的属性框中加入多项时如何换行 如何在下拉框里显示上几次程序运行输入信息 如何改变对话框DoModal返回值 怎样弹出选择目录...
  • JavaScript笔记

    2018-09-28 11:21:56
    js方法定义:function方法名([参数列表]){ 方法体 [return 返回值] } 注意:js中方法可以直接写在代码中,不需要“类”包裹 使用方法:方法名()-->方法调用-->立即执行 2.js文件:网页外专门保存js...
  • 的列表框中选择Microsoft Agent Control 2.0(Version 2.0),点击按钮Install??在 Install对话框中点击按钮OK??在Confirm对话框中点击按钮Yes??在对话框中点击按钮OK。 至此,Agent控件被添加到Delphi组件板...
  • 后台首页及文章列表视图文件里链接也需要修改。 <ol><li>修改 <code>learnlaravel5/resources/views/admin/home.blade.php</code> 中 <code>{<!-- -->{ url('admin/article') }}</code> 为 <code>{...
  • 5.8.2 为ListView列表项添加复选和选项按钮 147 5.8.3 对列表项进行增、删、改操作 149 5.8.4 改变列表背景色 153 5.8.5 ListActivity(封装ListViewActivity) 154 5.8.6 ExpandableListView(可扩展...

空空如也

空空如也

1 2 3 4 5
收藏数 98
精华内容 39
关键字:

列表框的什么属性返回