初入公司,果然新人一进来什么都干不了,想写些东西都没有能写的。前几天就是整天的看文档,JSF的文档,还有一些业务的文档,还有就是项目的框架的文档。
现在终于接到了算是一个小项目。需求说明书上也说本次需求改动不涉及对系统框架的改动。
既然有了事干那就开始。
首先将前端页面完成,因为项目中已经有很多相近的页面,真的只是copy过来简单改动一下就可以了,还熟悉了JSF。
因为系统已经上线,而且因为前端采用了so前端展示,界面框架已经有了,就是在上面进行嵌入设计就行了,想在前端框架上添加组件就要在配置文件中修改,一开始还找了半天,最终终于找到在uda-conf-security.xml中。在JSF上主要应该是关注页面的跳转是如何实现的,其实就是action。
还是到现在也还没有解决,就是在<h:inputText>中的value内应该写什么,也就是如何将在页面上输入的值通过一层一层传到后台最后传入数据库中。我还需要问问前辈们。。。
对框架EasyUDA的也有了一定的了解,主要是对框架中的3层编码结构有了了解,首先前端的动作和内容都指向Backing Bean(BB)层,然后BB层指向Use Case Controller(UCC)层,最终UCC层指向Business Service(BS)层,BS层就是跟数据库打交道的地方了。
==========================================================我是分割线====================================================
对框架又有了进一步认识,对于之前的功能的实现,完成前端后却无法跳转,真是让我各种找都找不到问题出在哪,好吧,那就查日志,框架中可以查询error日志,也是厉害的。找到error.log文件,在执行依次跳转,日志刷新,看问题吧,
No Renderer found for component {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /customer/customerbaseinfo/find_public3.jsp]} (component-family=javax.faces.ViewRoot, renderer-type=cn.git.Grid)
javax.faces.FacesException: javax.faces.component.UIViewRoot incompatible with javax.faces.component.UIOutput;Caused by: java.lang.ClassCastException: javax.faces.component.UIViewRoot incompatible with javax.faces.component.UIOutput;Caused by: java.lang.ClassCastException: javax.faces.component.UIViewRoot incompatible with javax.faces.component.UIOutput
从日志上看是找不到路劲导致的错误,可是我确实把路径存在数据库里了啊(这个系统的按键跳转的url是存在服务器端的数据库里,然后在uda-conf-security.xml中读到数据库中的url)。问前辈吧~~~结果还有两个配置文件里面需要配置,一个是navigation-customer.xml,里面有一个标签<to-viev-id>里面还要配上要跳转到的页面的jsf。还有一个definition-customer.xml,添加了 <definition name="/customer/customerbaseinfo/find_public3.tiles"
extends="main_layout">
<put name="content"
value="/customer/customerbaseinfo/find_public3.jsp" />
</definition>,
这下以后每个新的页面都需要在这两个配置文件中配置。
Find_public3跳转成功后就要先实现一个查询功能。确定的action指向BB层的一个find方法。这个find方法返回一个url,这个url将显示出查询出的信息。当然并不是就这么简单,方法里还要通过调用UCC层的一个find方法,去调用BS层的find方法,后面再说,在整个过程中还有一个很重要的类VO类,这个类里面的对象就是所要查询的客户的相关各个数据。在BB层调用UCC的时候就是讲返回值赋给VO。而在BB中的find返回的url页面内显示出来。
到现在我已经知道在jsf中的页面跳转即标签内action使用。但是对于当有输入时,如何将在文本框输入的内容传入到后台中还不清楚。
=================================================我是分割线=========================================================================================
整体需求已经完成,在页面的初始化上费了好大功夫搞懂了init方法。就是在init方法再执行一遍查询。因为已经集成了hibernate框架,所以在数据交互层使用HQL语句查询即可。
在实现集团客户与政府融资平台客户限额更改的时候需要对客户进行判断,判断其是否是集团客户或政府平台客户,需要从其他表中查询其客户类型,进行判断,涉及到了多表连接查询。在后台增加if判断如果不是alert提示非该类型客户,切不执行数据插入。
在项目类限额录入内也需要对项目种类进行判断,从其他表中查出项目的进行阶段的类型,进行判断,判定后决定是否执行。
=========================================我是分割线===================================================
提交测试后,发现存在缺陷,限额录入没有对负值与非数字进行判断,判断可以在页面或者后台均可实现,在页面上使用自定义标签
<gv:datamaskValidator validateField="projectLimitAmt" type="currency" prefixionMessage="【限额】" />
<gv:rangeValidator validateField="govLimitAmt" minValue="0" errorMessage="【限额】不能小于0"/>
若要实现页面上判断,必须在button标签内增加onclick="return validate()否则无效。
在后台只实现了对数字的判断,没有想到如何对非数字类型进行判断,因为在页面输入值时,在点击按钮后,还没有调用button的方法前,页面就先执行将输入框内的数据存入一个封装的类中,然而类中的相应对象的类型与输入类型不符则会报错,因此对数据类型的判断需在页面内进行,就是需要在输入框输入时就进行判断,因此暂时还没有想到如何在后台实现对数据类型的判断。