使用jsf + hibernate制作一个login实例教学录像

Posted on 2005-11-26 20:20 oksonic 阅读(12381) 评论(16)  编辑  收藏 所属分类: java

速动画教程系列第11集


下载:http://sonic.peakle.net/download/sonic011.rar
 

这一集将介绍jsf的基本使用

 

使用jsf + hibernate制作一个login实例

 

开发工具:Eclipse3.1、MyEclipse4.0.3、Tomcat、MySql

 

打开Eclipse

新建 web 工程,名称为login,j2ee版本为2.4

 

创建jsf框架

在工程目录上点右键-->MyEclipse-->Add JSF Capabilities

在弹出配置对话框时,使用默认的设置就可以了。

这时打开web.xml文件就可以看到以下的配置信息了

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <context-param>

    <param-name>javax.faces.CONFIG_FILES</param-name>

    <param-value>/WEB-INF/faces-config.xml</param-value>

  </context-param>

  <servlet>

    <servlet-name>Faces Servlet</servlet-name>

    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

    <load-on-startup>0</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>Faces Servlet</servlet-name>

    <url-pattern>*.faces</url-pattern>

  </servlet-mapping>

</web-app>

 

现在创建两个Bean,一个用来处理用户信息的验证,一个是和页面中的数据进行绑定

 

UserValidator.java

public class UserValidator {

    // 这是验证用户名和密码的过程

    public String validator(String username, String password) {

        if ((username == null) || (username.length() < 1))

            return "failure";

        if ((password == null) || (password.length() < 1))

            return "failure";

        if ((username.equals("test")) && (password.equals("test")))

            return "success";

        else

            return "failure";

    }

}

 

LoginBean.java

public class LoginBean {

 

    private String username; //用户名称

    private String password; //密码

    private UserValidator uv; //用户验证的实例

 

    public String getPassword() {

        return password;

    }

   

    public void setPassword(String password) {

        this.password = password;

    }

 

    public String getUsername() {

        return username;

    }

 

    public void setUsername(String username) {

        this.username = username;

    }

 

    public UserValidator getUv() {

        return uv;

    }

 

    public void setUv(UserValidator uv) {

        this.uv = uv;

    }

 

    // 用户登录过程

    public String login() {

        return uv.validator(username, password);

    }

}

 

现在按下Ctrl + N 键,使用jsp的向导来配置这两个Bean

MyEclipse-->WEB-JSF-->Managed Bean

 

Project: login

选中:Open Config File in Editor

Name: userValidator 就是Bean中的一个,这里的name可以自己起一个,如将第一个字母改为小写userValidator

Class: com.jsf.UserValidator

Scope: request

 

点击完成生成配置内容如下:

<faces-config >

    <managed-bean>

       <managed-bean-name>userValidator</managed-bean-name>

       <managed-bean-class>com.jsf.UserValidator</managed-bean-class>

       <managed-bean-scope>request</managed-bean-scope>

    </managed-bean>

</faces-config>

 

再次配置另一个Bean,不过这一回增加了一个属性

按下Ctrl + N 键,选择MyEclipse-->WEB-JSF-->Managed Bean

Project: login

选中:Open Config File in Editor

Name: loginBean

Class: com.jsf.LoginBean

Scope: request

点击add按钮

Name: uv 这里的内容为LoginBean中的uv属性,这个可是不能乱填的

Class: 这个不填

点下一步

Property Value: #{userValidator} 这里花括号中的内容为刚才配置的UserValidator的name属性,name属性的第一个字母使用的是小写

 

好,确定,完成

配置文件中新增了如下代码:

    <managed-bean>

       <managed-bean-name>loginBean</managed-bean-name>

       <managed-bean-class>com.jsf.LoginBean</managed-bean-class>

       <managed-bean-scope>request</managed-bean-scope>

       <managed-property>

           <property-name>uv</property-name>

           <value>#{userValidator}</value>

       </managed-property>

    </managed-bean>

 

在这一个bean中,它的uv属性被指定要在运行时注入一个com.UserValidator的实例。

 

现在创建jsp文件

打开WEB-INF目录下的 faces-config.xml 文件(如果你已经关闭了)

使用工具栏中的工具创建四个页面index.jsplogin.jspok.jsperror.jsp

使用工具栏中的工具navigation创建页面的关系

 

在弹出对话框中的From Outcome中分别填入successfailure

 

新增的配置信息如下:

       <navigation-rule>

       <from-view-id>/login.jsp</from-view-id>

       <navigation-case>

           <from-outcome>success</from-outcome>

           <to-view-id>/ok.jsp</to-view-id>

       </navigation-case>

       <navigation-case>

           <from-outcome>failure</from-outcome>

           <to-view-id>/error.jsp</to-view-id>

       </navigation-case>

    </navigation-rule>

    <navigation-rule>

       <from-view-id>/ok.jsp</from-view-id>

    </navigation-rule>

    <navigation-rule>

       <from-view-id>/error.jsp</from-view-id>

    </navigation-rule>

 

 

现在编写login.jsp中的代码如下:

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

<%@ page language="java" pageEncoding="UTF-8"%>

<html>

    <head>

       <title>

           Login

       </title>

    </head>

 

    <body>

       <f:view>

           <h:form>

              <h:panelGrid columns="3">

                  <h:outputLabel for="username" value="User Name:" />

                  <h:inputText id="username" value="#{loginBean.username}" required="true" />

                  <h:message for="username" />

                  <h:outputLabel for="password" value="Password:" />

                  <h:inputSecret id="password" value="#{loginBean.password}" required="true" />

                  <h:message for="password" /> 这里的password要和上一行的id="password"对应才可以返回错误消息

      </h:panelGrid>

              <h:panelGrid>

                  <h:panelGroup>

                     <h:commandButton value="Login" action="#{loginBean.login}" />

                  </h:panelGroup>

              </h:panelGrid>

           </h:form>

       </f:view>

    </body>

</html>

 

修改 index.jsp,代码如下:

<html>

    <head>

       <title>Index</title>

    </head>

    <body>

       <a href="login.faces">Login</a>

    </body>

</html>

 

修改 ok.jsp,代码如下:

<html>

    <head>

       <title>Login OK!!!</title>

    </head>

    <body>

       Login Ok!!!<br>

    </body>

</html>

 

修改 error.jsp,代码如下:

<html>

    <head>

       <title>Error!!!</title>

    </head>

    <body>

       Error!!!<br>

    </body>

</html>

 

好了,代码完成可以进行测试了

首先部署web程序到服务器,如果在这一段遇到错误的话请查看我以前发布的关于Eclipse+MyEclipse配置的录像

输入正确的用户名和密码 (test , test),提交后进入ok.jsp,输入错误的密码后进入error.jsp

 

JSF部份已经完成,现在添加Hibernate框架

 

在工程目录上点右键-->MyEclipse-->Add Hibernate Capabilities

在弹出的对话框中使用默认设置

 a1.gif

下一步,使用默认设置

下一步,如图

 a2.gif

点击 完成

 

在 hibernate 的配置图型介面中,点击New... 创建一个数据库连接(具体方法请看录像)

 

配置完成后,内容如下:

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

<!-- Generated by MyEclipse Hibernate Tools.                   -->

<hibernate-configuration>

 

    <session-factory>

       <property name="myeclipse.connection.profile">conn_mysql</property>

       <property name="connection.url">jdbc:mysql://localhost:3306/test</property>

       <property name="connection.username">root</property>

       <property name="connection.password">root</property>

       <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

       <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

    </session-factory>

</hibernate-configuration>

 

在配置文件加入一行,增加一个属性,可以在状态栏中显示hibernate的查询语句

<property name="show_sql">true</property>

 

修改后的配置文件内容如下:

<hibernate-configuration>

 

    <session-factory>

       <property name="myeclipse.connection.profile">conn_mysql</property>

       <property name="connection.url">jdbc:mysql://localhost:3306/test</property>

       <property name="connection.username">root</property>

       <property name="connection.password">root</property>

       <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

              <property name="show_sql">true</property>

       <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

    </session-factory>

</hibernate-configuration>

 

点击 Copy JDBC Driver and add to classpath 将jdbc文件拷贝到lib目录中

 

现在启动MySql,并创建一张新表,这里我已经创建完成了,并在其中添加了一个用户名为test密码也是test的用户

 

CREATE TABLE `user` (

  `ID` int(11) NOT NULL auto_increment,

  `USERNAME` varchar(50) NOT NULL default '',

  `PASSWORD` varchar(50) NOT NULL default '',

  PRIMARY KEY  (`ID`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

打开 MyEclipse 的数据浏览工具

选中user表,点右键-->Create Hibernate Mapping

 a3.gif

回到MyEclipse状态中

 

打开 UserValidator.java 文件

 

修改为以下内容:

import java.util.List;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.Transaction;

import com.Hibernate.SessionFactory;

 

public class UserValidator {

    // 这是验证用户名和密码的过程

    public String validator(String username, String password) {

        if ((username == null) || (username.length() < 1))

            return "failure";

        if ((password == null) || (password.length() < 1))

            return "failure";

        // 创建连接

        Session session = SessionFactory.currentSession();

        // 创建事务

        Transaction tx = session.beginTransaction();

        // 创建对话

        Query query = session

                .createQuery("from User as u where u.username=? and u.password=?");

        query.setString(0, username);

        query.setString(1, password);

        List list = query.list();

        // 事务提交

        tx.commit();

        if (list.size()>0)

            return "success";

        else

            return "failure";

 

    }

}

 

现在完成了全部的代码,可以进行测试了,修改后代码将会读取数据库的信息进行验证

 

 

Feedback

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2005-11-28 13:19 by 灯雪
非常支持 ̄!!!!!!!

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2005-12-01 20:57 by fds
受益非浅,非常感谢

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2005-12-30 18:35 by wangfeng
我跟着例做,最后又这样的异常!能帮我分析分析,这是怎么回事啊!!谢了
javax.servlet.ServletException: #{loginBean.login}: javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: antlr/ANTLRException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)


??

javax.faces.FacesException: #{loginBean.login}: javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: antlr/ANTLRException
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:78)
javax.faces.component.UICommand.broadcast(UICommand.java:312)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2006-01-21 22:45 by yeqiufeng
下载了 支持一下

听说JSF比strus更简单一些 先看看

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2006-02-11 09:12 by keven
支持!!

# 我也是啊,谁解决了,回答下  回复  更多评论   

2006-02-14 18:13 by
我跟上面的错误一样的
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)


不知道为什么,请主人回答下

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2006-02-16 02:20 by woaoabc
终于搞定了,原来是jar包没有加进去,我用的myeclipse是4.1的,eclipse是3.1.1的,搞半天是ehcache.jar没有加进去,hibernate加入特性的时候是不能把这个jar包也加进去的,需要你自己手动加入(hibernate需要这个包)希望大家有什么可以和我研究,正在学习jsf中,感觉好用

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2006-02-22 22:18 by abe.wang
i 服了 you.
辛苦了。。谢谢。。。

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2006-03-23 13:15 by lh
javax.servlet.ServletException: #{loginBean.login}: javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: org/hibernate/Session
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)

照着做出现的问题怎么解决?

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2006-03-30 11:45 by shijian0306
我也是跟着做的,我用的myeclipse是4.2的,eclipse是3.1.2的

web容器使用的是rasin2.1.14,为什么刚进去的时候就告诉我出错了,说

500 Servlet Exception
META-INF/c.tld:6 unknown element `xsi:schemaLocation' in `taglib'


--------------------------------------------------------------------------------
Resin 2.1.14 (built Thu Jul 1 18:39:55 PDT 2004)


大哥们,这个错误怎么解决阿!!!!!!!!!!!!!!!!!
在线等!!!!!!!!!!!!

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2006-05-18 13:24 by king2
要得,我要仔细看看

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2006-06-26 09:01 by troy
谢谢

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2006-08-03 15:37 by zc
re: 使用jsf + hibernate制作一个login实例教学录像 回复
javax.servlet.ServletException: #{loginBean.login}: javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: org/hibernate/Session
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)

照着做出现的问题怎么解决?
我和你的错误一样的,你解决了吗?如果解决了,能不能告诉我一下,
QQ:123309182

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2007-02-14 09:47 by menglz
javax.servlet.ServletException: #{loginBean.login}: javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: antlr/ANTLRException

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2007-02-14 09:48 by menglz
javax.servlet.ServletException: #{loginBean.login}: javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: antlr/ANTLRException

这个问题是因为缺少antlr-2.7.5H3.jar

可是这个问题是因为什么啊???
javax.servlet.ServletException: #{loginBean.login}: javax.faces.el.EvaluationException: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.IdentNode
\-[IDENT] IdentNode: 'Userlist' {originalText=Userlist}

# re: 使用jsf + hibernate制作一个login实例教学录像  回复  更多评论   

2007-05-01 22:05 by
我使用下载的工程直接引入的 不过出现了错误:
root cause

javax.faces.FacesException: #{loginBean.login}: javax.faces.el.EvaluationException: org.hibernate.exception.GenericJDBCException: could not execute query

我都是原封不动的使用下载的东西 只是我用SQL SERVER 怎么改都是出现这个错误,不知道怎么解决啊

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 103, comments - 1104, trackbacks - 0, articles - 0

Copyright © oksonic