原文地址:dorado学习笔记(二)
作者:傻掛
·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到
·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewModel,这个可以看成是一个Servlet,它先调用init方法,接着调用initDataset(),然后是调用initControl,最后是调用doLoadData()方法完成datasest的数据加载处理,在initControl用来对生成control html的过程进行控制,比如某些控件是否只读,是否可见等。
·各种控件的刷新是通过dataset来触发的
·如果要实现不刷新页面动态更新dataset绑定的congrol,需要使用dataset的flushData方法
·后台的ViewModel有两种状态,一种是在客户端刷新的时候发送的请求,一种是在客户端不刷新的时候发送的请求(STATE_SERVICE)
·设置pageSize在dataset中而不是control中
·在使用hibernate的时候,报没有找到数据源的异常是因为setting.xml中没有设置defaultDatasource的原因
·要让主从表联动,有两种方式,一种是在主表的afterScroll方法中,给从表的parameters传递参数,接着执行子表的flushData()方法,同时在从表的监听器afterLoadData方法中取得参数添加matchrule方法,另外一种方法就是在子dataset的MasterLink属性中设置主从表之间的字段关联(同时还要在从表的MatchRule中进行相关的设置),二者的区别在于,每一次使用flushData会执行sql语句,而设置MasterLink则能实现数据的缓存
·通过beforeLoadData方法的返回值来 决定是否调用loadData方法,如果返回为false将不调用,所有的before都具有这样的特性,即通过返回false来终止dataset的默认操作,包括after操作
·监听器只是为某一个Dataset服务的,在它内部是没有办法访问其他dataset对象,同样,它也没法访问到视图模型中的其他各种对象,它也不关心视图模型本身的各种状态,因此监听器内部的java代码应该是视图模型的状态无关
·服务器端视图模型的创建有两种情况,一种是基于jsp的请求,一种基于客户端dataset的flushData方法发送的请求,如果viewmodel事件代码是基于某一种请求来写的,那么一定会存在问题,这里主要是传递参数,比如基于jsp的请求就可以通过request来传递请求参数,而基于客户端dataset发送的请求是通过dataset的parameters来传递的,为了能做到客户端对两种不同的请求统一进行处理需要将两种传递参数的方式做到一致,即都通过view的proeprties来传递参数
·为了在flushData请求中也能使用第一次jsp请求发送的参数,需要使用view的properties来保存request请求的参数
·要把对数据的验证尽量放在dataset上(或使用Validator校验器或在dataset的事件中加以验证),而不是控件上,因为使用dataset的控件可能会有多个,而验证的逻辑只有一份
·Dorado里面各种Request信息的获取是通过DoradoContext.getContext().getParameter("xxx")来实现的.类似于Servlet中的Request.getParameter("xxx"),而如果是通过View的Properies来传递参数,这需要这样写:DoradoContext.getContext().getAttribute(DoradoContext.VIEW, "xxx").放在View的Properties中的值在服务器端和客户端都可以访问,如果是在客户端访问View的Properties属性,则需要这样写:getViewModel().properties().getValue("xxx");
·对于保存的dataset 需要设置keyFields,否则将无法保存,注意这里的keyFields并不等于数据库表中对应的主键,为什么需要keyfields来定位记录?它是如何定位记录的?
·dataset中的每一条记录都是状态信息的,客户端和服务器端都可以通过状态信息来进行相应的操作
·对于服务器端Dataset来说,所有的Dataset都实现了与POJO进行交换的相关方法:from(Single)DO和to(Single)DO
·FormDataset可以理解为一个FormBean,它的数据来自于一个Request对象
·对于autosqldataset来说,如果是了matchrule(通过dataset.parameters().setValue("xxx", "xxx")给matchrule中指定的value加匹配值),在不输入任何条件的情况下,希望能显示所有的数据,其做法是要设置escapeValue为true
·在所有dataset中,customDataset的扩展性是最高的
·CustomDataset和DODataset之间的唯一区别在于分页处理机制,CustomDataset需要通过设置pageIndex, pageSize以及pageCount来计算分页数据,而DODataset则把所有数据从数据库中取出来,然后在内存中自动进行分页处理