近期newxy的爱好者提出一些问题,下面是对些问题的解答。
问:请问,如何支持数据校验功能?
数据校验有或简或繁的业务逻辑,也有的单纯是数据类型或是否为空的判断.前者需要在后台写java代码来实现,后者可用struts的插件validator来实现,newxy的通用动态formBean支持validator的静态验证方法.
newxy还有一种持续化数据的方法,是为每一表产生一持久类,可以利用这个特性来校验数据,但newxy内容很多,到目前还没有对这一特性作介绍.
问:使用通用动态formBean,对于在输入过程中不需要明确输入的字段,是不是必须在页面中用hiden列定义?
答:可以不用hidden,如formBean中有一字段address,如果这个字段不需要让用户编辑,不别让它出现在表单中.
问:关于分页的实现问题
在文档中给出的分页例程如下:
<div><nlogic:navigate formName="industry" length="20"/></div>
<table>
<nlogic:iterate id="rec" name="industry" property="_coll">
<nhtml:TR >
<td style="font-size:14px;color:#000088;cursor:hand">
<bean:write name="rec" property="code"/>
<bean:write name="rec" property="industry"/>
</td>
</nhtml:TR>
</nlogic:iterate>
</table>
明显,分页的控制按钮全部在列表的上部,但是,在通常的开发中,这些控制按钮一般都在下部,那么将<div><nlogic:navigate formName="industry" length="20"/></div>放在<nlogic:iterate>...的后面,是否也一样能实现分页?
答:如果将分页标签放到列表下面,需要在<nlogic:iterate />标签中也指定每页长度,即length="20",与分页标签length值相同.
问:请问,如何获得单条纪录的dto?
答: formBean的_coll属性保存的是结果集,formBean作为bean保存了结果集的一条记录数据,可称为当前记录,如果获得的是一条记录,这条记录会保存在_coll记录集中,同样也保存在作为bean的formBean中,可用Object value=formBean.get("field1")方法得到记录field1字段值.
看看《2.DAO类+通用持久类+通用动态formBean类》、《3.DAO类+通用持久类+通用动态formBean类+通用DispatchAction类有助于理解。
"如何根据sql语句产生formbean的数据,进而获得dto?",你可从表单将查询条件传到后台,在Action方法中得到的formBean的_coll属性就已包含了结果集.表单位传查询条件到后台有两种方法一种是直接的如:
<nform action="">
<nhidden name="_sql" value="select * from ..."/>
</nform>
另一种是通过多项查询将条件传到后台.
在后台通用DispatchAction类有个方法find(),可以得到查询结果,你不别写代码。
"利用通用动态formBean类,实现多项查询不一定能满足需求"这是不对的,可以说newxy实现多项查询可满足绝大部分要求.对可参看到范例的多项查询,也可看主页的左上角《3.DAO类+通用持久类+通用动态formBean类+通用DispatchAction类》。
问:使用newxy,是不是页面的form中的项目必须和数据表的字段一一对应,而不能缺少?
答:form表单中可以加入任意属性,提交后这些属性会保存在formbean中不会出错,但只有与表字段同名的属性会保存到数据库。
问:关于主键的问题, 我不是很明确
1. 这里的主键名是指定的吗,就是id吗,还是根据自已的情况随意指定名称
2. 联合主键我怎么指定。
答:主键名可以是任意的,newxy可以自动为主键增值,但如果是联合主键,需要开发者写代码赋值.