Seam学习3--第一个实例(注册实例的建立与理解)
来源:互联网 发布:php统计网站访问量代码 编辑:程序博客网 时间:2024/06/05 16:00
本学习结合结合了满江红的JBoss seam中文手册
jboss-seam-2.2.2.Final\examples\registration 例子(注册示例)的创建与分析
工程实现具体步骤如下:
1:在eclipse里,新建一个“Seam Web Project”,project名称是registration,数据库我用的是mysql,这里也要设置好,并通过测试。(创建Seam Project的步骤,可参见Seam Project的建立)
2:把jboss-seam-2.2.2.Final\examples\view文件夹下的3个文件,拷贝到项目registration下的WebContent下,index.html可以覆盖掉已存在的。
3:把 src\org\jboss\seam\example\registration下的 Register.java,RegisterAction.java 拷贝到工程registration-ejb下的ejbModule的org.domain.registration.session包的下面。然后把 两个java文件的package修改成正确的“package org.domain.registration.session;”
这时候的错误先不用管,应为entity bean还没有拷贝过来。
4:上面提及的工程registration-ejb只有一个包,为了有一个好习惯,我们还要自己创建一个org.domain.registration.entity的包,用来存放entity。
5:把 src\org\jboss\seam\example\registration下的User.java拷贝到刚刚创建好的 org.domain.registration.entity包的下面。然后把package修改成正确的“package org.domain.registration.entity;”
6:把相关的java错误都修正。比较简单,就不多啰嗦了。另外,test的部分先不涉及,日后在慢慢学习。
7:~~\examples\registration\resources下的文件可以不使用,因为eclipse自动生成中都包含了这部分内容。
8:就是启动jboss server来验证自己的成果。你会发现数据库中的表会自动创建好。
页面效果:
实体Bean: User.java
该实体bean用于保存用户资料,通过注解完成与数据库的映射关系,并提供类似于hibernate中的validate校验功能(同样是注解)
@Entity//声明这个类是实体bean@Name("user")//Seam组件,整个seam工程中唯一,当jsf页面中通过user.xx调用该组件上下文时,实例化这个User@Scope(SESSION)//Seam组件,指明这个bean的作用域为一个会话@Table(name="users")//指明这个bean与数据库中哪个表进行映射public class User implements Serializable{ private static final long serialVersionUID = 1881413500711441951L; //实现bean的属性 private String username; private String password; private String name; public User(String name, String password, String username) { this.name = name; this.password = password; this.username = username; } //必须需要一个空的构造方法 public User() {} @NotNull//不能为null public String getName() { return name; } public void setName(String name) { this.name = name; } @NotNull @Length(min=5, max=15) //字段不能为null且指明了长度的范围 public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Id @NotNull @Length(min=5, max=15)//每个实体bean必须有一个ID 唯一标识 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Override public String toString() { return "User(" + username + ")"; }}
无状态会话bean RegisterAction.java
用于做事务管理和数据库访问,是jsf的动作监听器
@Stateless//指明该类是一个无状态会话bean@Name("register")//Seam组件,整个seam工程中唯一public class RegisterAction implements Register{ @In//通过该注解,表示user需要由Seam注入,也就是将user这个组件注入到这个会话bean中 private User user; @PersistenceContext//动态注入EJB实体管理器,注入后可通过它完成对数据库的简单操作 private EntityManager em; @Logger//资料没看懂...相当于日志吧... private static Log log; public String register() { List existing = em.createQuery("select u.username from User u where u.username=#{user.username}") .getResultList();//根据用户名称查询用户 if ( existing.size()==0 )//如果没有结果,说明没有重复名称,可以添加用户 { em.persist(user);//相当于我们sql中的save ,将对象数据添加到数据库 log.info("Registered new user #{user.username}");//将信息录入日志 return "/registered.xhtml";//返回到registered.xhtml页面显示 } else//用户已经存在 { //seam的内置组件,将信息存入,页面通过 <h:messages/>标签进行读取 FacesMessages.instance().add("User #{user.username} already exists"); return null;//为null表示当页 } }}
视图页面
<!--index.xhtml --><html> <head> <!-- 页面定期刷新,如果加url的,则会重新定向到指定的网页,content后面跟的是时间(单位秒),把这句话一般加到指定网页的head标签里 --> <!--此处发生了改变,表示跳转到register.xhtml页面 --> <meta http-equiv="Refresh" content="0; URL=register.seam"> </head></html>
当访问首页index.xhtml时,进行跳转,根据指定,跳转到register.xhtml
<!-- register.xhtml --> <body> <f:view><!-- jsf标签需要在view这个标签内使用 --> <h:form id="registration"> <s:validateAll><!-- 这个标签内的输入需要经过实体bean的校验 --> <h:panelGrid columns="2"> Username: <h:inputText id="username" value="#{user.username}" required="true"/> Real Name: <h:inputText id="name" value="#{user.name}" required="true"/> Password: <h:inputSecret id="password" value="#{user.password}" required="true"/> </h:panelGrid> </s:validateAll> <h:messages id="messages"/><!-- 显示错误信息,无则不显示 --><!-- 按钮,点击后执行register这个组件中的register方法 --> <h:commandButton id="register" value="Register" action="#{register.register}"/> </h:form> </f:view> </body>
- Seam学习3--第一个实例(注册实例的建立与理解)
- 学习struts2的第一个小实例
- 新手学习javaScript的第一个实例
- Struts2 第一个实例学习
- (3)第一个简单的SVG 实例
- python学习(2)安装与第一个实例
- 第一个Struts2的实例:
- gtk 的第一个实例
- RN的第一个实例
- PHP的第一个实例
- Jboss Seam 学习笔记-运行实例的注意点
- day65(5.15)我的第一个框架学习实例struts
- 学习php的第一个实例--留言簿及管理系统
- react学习 第一个实例 helloworld
- 第一个cmake,实例学习,项目管理
- Vue.js学习和第一个实例
- hadoop学习---运行第一个hadoop实例
- Qt---第一个工程建立与学习
- openGL剪裁的使用
- Oracle的MERGE和MySql的replace into 简单应用介绍
- Win7和Xp双系统安装的一点心得
- 嵌入式 mysql长时间没操作会自动关闭连接default是8hours解决方法集合mysql_ping(可能部分重复)
- SqlServer中SubString与CharIndex函数的使用 SubString和CharIndex结合使用
- Seam学习3--第一个实例(注册实例的建立与理解)
- dojo.require 详解
- 利用pktgen发包工具做网卡性能测试
- $_SERVER['SCRIPT_FILENAME'] 和__FILE__ 用法区别
- SQL SERVER 消息 468,级别 16,状态 9
- You must install 'makeinfo' on your build machine
- Maven_Python打包遇到的问题总结
- linux中的信号处理(signal和alarm)
- __FUNCTION__, __LINE__