您的位置:首页 > 其它

实现用户名密码登陆,输入错误3次后锁定用户

2014-02-21 14:33 816 查看
<iframealign="center"marginwidth="0"marginheight="0"src="http://www.zealware.com/csdnblog336280.html"frameborder="0"width="336"scrolling="no"height="280"></iframe> 本教程介绍如何用数据库中的数据,动态地构建一个树状结构。使用NetBeansVisualWebPack5.5,构建一个两页应用程序,第一页包含一个Tree组件。使用来自数据库的名称,将一级节点填充在Tree中,使用人员的trip填充二级节点。trip节点与第二页链接,显示该trip的详细信息。目录l设计主页l连接数据库l使用数据库表格构建树状结构l添加详细信息页l添加代码l定以页面导航l更多操作:将Action方法与Tree节点绑定l关于选择Tree节点的一点说明本教程将使用以下技术和资源
JavaServerFaces组件/JavaEE平台<shapetypeid="_x0000_t75"stroked="f"filled="f"path="m@4@5l@4@11@9@11@9@5xe"o:preferrelative="t"o:spt="75"coordsize="21600,21600"><strokejoinstyle="miter"></stroke><formulas><feqn="iflineDrawnpixelLineWidth0"></f><feqn="sum@010"></f><feqn="sum00@1"></f><feqn="prod@212"></f><feqn="prod@321600pixelWidth"></f><feqn="prod@321600pixelHeight"></f><feqn="sum@001"></f><feqn="prod@612"></f><feqn="prod@721600pixelWidth"></f><feqn="sum@8216000"></f><feqn="prod@721600pixelHeight"></f><feqn="sum@10216000"></f></formulas><patho:connecttype="rect"gradientshapeok="t"o:extrusionok="f"></path><lockaspectratio="t"v:ext="edit"></lock></shapetype><shapeid="_x0000_i1025"style="WIDTH:10.5pt;HEIGHT:11.25pt"alt="workswith"type="#_x0000_t75"></shape>1.2withJavaEE5*<shapeid="_x0000_i1026"style="WIDTH:10.5pt;HEIGHT:11.25pt"alt="workswith"type="#_x0000_t75"></shape>1.1withJ2EE1.4
Travel数据库<shapeid="_x0000_i1027"style="WIDTH:10.5pt;HEIGHT:11.25pt"alt="required"type="#_x0000_t75"></shape>必需的
BluePrintsAJAX组件库<shapeid="_x0000_i1028"style="WIDTH:10.5pt;HEIGHT:11.25pt"alt="notrequired"type="#_x0000_t75"></shape>不是必需的
*该教程发布时,只有SunJavaSystemApplicationServer支持JavaEE5本教程与SunJavaApplicationServerPE9.0UpdateRelease1和Tomcat<chsdatew:st="on"year="1899"month="12"day="30"islunardate="False"isrocdate="False">5.5.17</chsdate>配合使用。设计主页从构建包含Tree组件和TRIP数据库表格的主页开始。创建一个新的可视化Web应用程序项目,并将其命名为
DatabaseTree
2.从Palette的Basic部分,将一个Tree组件拖动到页面上,键入
TravelInformation
并按
Enter。在Properties窗口中,将id属性设置为
displayTree
,将
clientSide
属性设置为
True
clientSide
True
时,每个子节点(无论展开与否)都被发送给客户端,但是在父节点展开之前它们是不可见的。
clientSide
False
时,仅提供展开父节点的子节点。
3.选择TreeNode1,右键单击,从弹出菜单中选择Delete。在本应用程序中,不需要IDE创建的初始tree节点,因为正在以编程方式填充tree。如果未删除该节点,在JSP标记属性中设置的值将优于运行时设置,该页将显示此节点。从Palette中将MessageGroup组件拖动到页面上较边远的位置,比如页面的右上角。

连接数据库

下一步,将页面与Travel数据源中的数据库表格连接。然后使用QueryEditor修改用于检索数据的SQL查询,使游客的姓名按字母顺序显示,旅行日期则按时间顺序显示。1.打开Runtime窗口,展开Databases节点,验证Travel数据库已连接。如果代表TRAVEL数据库标记的jdbc节点断开,而且不能展开该节点,则IDE未与数据库连接。右键单击TRAVEL的jdbc节点,并从弹出菜单中选择Connect。如果出现Connect对话框,为Password输入
travel
,选择RememberPasswordDuringThisSession,然后单击OK。如果未看到TRAVEL数据库的jdbc节点,请参见NetBeansVisualWebPack安装说明,了解有关使数据库为IDE所用的信息。注意如果正在使用ApacheTomcat,在尝试连接数据库之前,将
derbyClient.jar
文件复制到
<tomcat_install>/common/lib</tomcat_install>
目录
2.展开TRAVEL数据库的jdbc节点,然后展开Tables节点。3.将TRIP节点拖动到VisualDesigner上面。Outline窗口显示Page1部分的tripDataProvider节点,以及SessionBean1部分的tripRowSet节点。4.在Outline窗口中,右键单击tripRowSet节点,并选择EditSQLStatement。在编辑区域出现带有TRIP表格图的QueryEditor。5.从Runtime窗口中拖动Travel>Tables>PERSON节点,并将其放置在QueryEditor中Trip表格图的旁边,另一个表格图出现,且在两个表格图之间带有链接或连接。在PERSON表格中,清除对PERSONID复选框的选择。7.在QueryEditor的DesignGrid中,找到TRAVEL.PERSON表格的NAME行。单击SortType单元格,并在下拉列表中选择Ascending。此操作将数据库表格中的姓名按姓氏字母顺序分类。8.找到TRAVEL.TRIP表格的DEPDATE行。单击SortType单元格,并在下拉列表中选择Ascending。此操作将旅行日期按照由早到晚的顺序分类。使用数据库表格构建树状结构现在添加一个请求bean属性,来保存应用程序中两个页都要使用的信息。然后向
prerender()
方法添加代码,使用TRIP和PERSON数据库表格动态地构建Tree组件。1.打开Page1,使Outline窗口可见。在Outline窗口中,右键单击RequestBean1节点,并选择Add>Property。将属性命名为
personId
将类型输入为
Integer
然后单击OK
该属性保存游客的ID,如下图所示。然后,构建一个使用该属性的Trip详细页面,将当前游客的id传递给Page1。设置该属性时,Page1将该游客的节点展开。注意:由于该版本产品存在一个错误,可能需要关闭弹出菜单,然后再一次右键单击RequestBean节点,激活Add子菜单。2.打开JavaEditor中的Page1,然后滚动到
prerender
方法
使用以下以黑体显示的代码替换
prerender
方法的主体部分
代码示例1Page1prerender方法
publicvoidprerender(){
//IftheRequestBean'spersonIdisset,then
//wejustcamebackfromtheTrippage
//andhaddisplayedaselectedtrip.
//WeusethepersonIdlatertodeterminewhether
//toexpandaperson'snode
IntegerexpandedPersonId=getRequestBean1().getPersonId();
try{
//Setupthevariableswewillneed
IntegercurrentPersonId=newInteger(-1);
//IfnbrChildrenisnot0thenthisisa
//postbackandwehaveourtreealready
intnbrChildren=displayTree.getChildCount();
if(nbrChildren==0){
//Listofouter(person)nodes
ListouterChildren=displayTree.getChildren();
//Erasepreviouscontents
outerChildren.clear();
//Listofinner(trip)nodes
ListinnerChildren=null;
//ExecutetheSQLquery
tripDataProvider.refresh();
//Iterateovertherowsoftheresultset.
//Everytimeweencounteranewperson,addfirstlevelnode.
//Addsecondleveltripnodestotheparentpersonnode.
booleanhasNext=tripDataProvider.cursorFirst();
while(hasNext){
IntegernewPersonId=
(Integer)tripDataProvider.getValue(
"TRIP.PERSONID");
if(!newPersonId.equals(currentPersonId)){
currentPersonId=newPersonId;
TreeNodepersonNode=newTreeNode();
personNode.setId("person"+newPersonId.toString());
personNode.setText(
(String)tripDataProvider.getValue(
"PERSON.NAME"));
//Iftherequestbeanpassedapersonid,
//expandthatperson'snode
personNode.setExpanded(newPersonId.equals
(expandedPersonId));
outerChildren.add(personNode);
innerChildren=personNode.getChildren();
}
//Createanewtripnode
TreeNodetripNode=newTreeNode();
tripNode.setId("trip"+
tripDataProvider.getValue("TRIP.TRIPID").toString());
tripNode.setText(
tripDataProvider.getValue("TRIP.DEPDATE").toString());
tripNode.setUrl("/faces/Trip.jsp?tripId="+
tripDataProvider.getValue("TRIP.TRIPID").toString());
innerChildren.add(tripNode);
hasNext=tripDataProvider.cursorNext();
}
}
}catch(Exceptionex){
log("Exceptiongatheringtreedata",ex);
error("Exceptiongatheringtreedata:"+ex);
}
}
该代码读取trip记录,这些记录按personId顺序排列。代码为每个personId在Tree中创建一个新的一级节点。然后代码为与该personId相关的每个trip创建一个二级节点(嵌入节点)。最后,代码将二级trip节点与
tripNode_action
方法绑定,本节的后面将创建该方法。按Alt-Shift-F来修正未发现类的错误。在FixImports对话框中,确保java.util.List出现在FullyQualifiedName字段中,然后单击OK。5.运行项目。Web浏览器打开并显示Tree组件,该组件在每个一级节点显示有一个人员的姓名。展开一个节点,显示该人员的旅行日期。注意,姓名按姓氏的字母顺序显示,日期按时间先后顺序显示,在下一节,您将添加代码以便在用户单击trip节点时导航到第二页。第二页显示用户所选trip的详细信息。

添加详细信息页

在此,向应用程序添加了第二页。本页使用了PropertySheet组件,动态地显示用户在第一页上所选trip的详细信息。打开Projects窗口,右键单击WebPages节点,然后从弹出菜单中选择New>Page。将新页命名为Trip。2.打开RuntimeWindow,然后将Tables>TRIP节点拖动到Trip页面的VisualDesigner上。在对话框中,选择CreateSessionBean1tripRowSet1旁边的单选按钮.Outline窗口显示Trip部分中的tripDataProvider1节点,以及SessionBean1部分中的tripRowSet1节点。在Outline窗口中,右键单击tripRowSet1节点,并选择EditSQLStatement。4.在QueryEditor的DesignGrid中,右键单击TRIPID行中的任一单元格,然后选择AddQueryCriteria。在对话框中,将Comparison下拉菜单设置为=Equals,然后选择Parameter单选按钮。单击OK。在TRIPID的Criteria列中可以看到=?,它在SQL查询中添加以下WHERE子句。
WHERETRAVEL.TRIP.TRIPID=?
在VisualDesigner中打开TripPage。从Palette的Basic部分,将一个Hyperlink组件拖动到页面上,键入
Home
并按Enter。6.在Hyperlink组件的Properties窗口中,单击
action
属性的省略号(…)按钮,从下拉列表中选择
hyperlink1_action
,然后单击
OK
IDE将hyperlink1_action事件处理程序添加到Java源。从Palette中将MessageGroup组件拖动到页面,并将其放在Hyperlink组件的右面。8.从Palette的Layout部分,将PropertySheet组件拖动到页面上。将它放在Hyperlink组件的下方。PropertySheet组件为布置trip信息提供了一个容器。PropertySheet组件包含PropertySheetSection,而PropertySheetSection则包含Property组件。9.选择PropertySheetSection1。在Properties窗口中,将
label
属性设置为
TripDetails
注意如果项目源级别被设置为1.4,则在Properties窗口中更改属性表标签后,属性表标签不会被更新。在Outline窗口中,展开propertySheet1>section1,然后选择property1节点。在Properties窗口中,将
label
属性设置为
DepartureDate
并按Enter。在Outline窗口内,选择section1,右键单击,并从弹出菜单中选择AddProperty。在Properties窗口中,将
label
属性设置为
DepartureCity
并按Enter。12.从Palette中拖动StaticText组件,并把它放在Outline窗口中的property1节点上。StaticText成为property1的一个子结点。VisualDesigner中也出现了StaticText。13.右键单击StaticText组件,然后从弹出菜单中选择BindtoData。如有必要,单击BindtoDataProvider选项卡,将该选项卡置于前端。在对话框中,选择Data字段中的TRIP.DEPDATE。在VisualDesigner的StaticText组件中出现当前日期。将StaticText组件添加到property2。将StaticText与TRIP.DEPCITY绑定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐