JSF使用 JavaBean 来达到程序逻辑与视图分离的目的,其作用是在业务逻辑及UI组件之间搭起桥梁
JSF受管bean的配置方法
每次在JSF 页面中引用bean 时,JSF:
实例化该bean;使用setter 和getter 方法向其注入已声明的值或默认值;按照faces-config.xml 文件中的定义将该bean 放在作用域中。
在faces-config.xml 文件中配置受管bean:
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>onlyfun.caterpillar.UserBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<!--<managed-bean-class>用于指定声明的受管bean 所属的类的全名。-->
<!--<managed-bean-name>用于指定受管bean 的名称。此名称将作为bean 的标识符-->
<!--<managed-bean-scope>用于指定受管bean 的作用域,bean 的新创建实例将存储在其中。-->
<!--<managed-property>用于使用<managed-property>标记定义任何受管bean 的属性的初始化值-->
使用批注定义受管bean:
@ManagedBean(name="helloBean")
@SessionScoped
public class HelloBean implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
可以使用批注来声明受管bean 的作用域,如:@RequestScoped、@SessionScoped、@ApplicationScoped、@ViewScoped和@NoneScoped。
将受管bean 与UI 组件绑定
要将UI 组件与受管bean 的属性绑定,可以使用JSF 表达式语言(EL)。
EL 通过使用以分隔符#{}开头的表达式来访问受管bean 的属性。
您可以在JSF 中使用以下类型的EL:
值表达式
值表达式通过使用UI 组件的value属性将UI 组件的值与bean 属性绑定。
#{bean_name.property_name}
<!-- bean_name 是其属性将与UI 组件的值绑定的bean 的名称。它与faces-config.xml 文件中<managed-bean-name>标记定义的名称相映射
property_name 是需要与UI 组件绑定的受管bean 属性的名称。它与faces-config.xml 文件中对应的<managed-bean> 标记的<property-name> 标记相映射。-->
方法表达式
方法表达式用于引用bean 中定义的方法。
在JSF 应用程序中,UI 组件需要调用为它代表的组件执行一些必要处理的方法。
处理组件生成的所有事件需要这些方法。
此外,还需要它们验证用户在UI 组件中输入的数据。
您可以使用方法表达式调用受管bean 中定义的方法。
#{bean_name.method_name}
<!-- bean.name 是需要调用其方法的bean 的名称。
method_name 是需要调用的方法的名称。此方法可以用于验证用户输入的值或者处理UI 组件生成的事件。-->
使用受管bean注册用户至数据库
1、建立数据表
create database userDB
go
use userDB
go
create table userTable
(
username varchar(50) primary key,
password varchar(50)
)
go
select * from userTable
2.编写受管bean
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
@ManagedBean(name = "regFormBean")
@SessionScoped
public class RegFormBean implements Serializable {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String addUser()
{
PreparedStatement pstmt = null;
Connection con = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection("jdbc:sqlserver://C215001:1433;DatabaseName=userDB", "sa", "123456");
pstmt = con.prepareStatement(
"Insert into userTable(username,password)values(?,?)");
pstmt.setString(1, username);
pstmt.setString(2, password);
pstmt.executeUpdate();
return "reg_suc";//返回到reg_suc.xhtml页面
} catch (Exception exp) {
return "error";//返回到error.xhtml页面
}
}
}
3、建立注册表单,将受管Bean与UI组件相关联
<h:body>
<h:form>
username:<h:inputText value="#{regFormBean.username}"></h:inputText><br/>
password:<h:inputSecret value="#{regFormBean.password}"></h:inputSecret><br/>
<h:commandButton type="submit" value="注册" action="#{regFormBean.addUser}"></h:commandButton>
</h:form>
</h:body>
测试是否注册成功:
reg_suc.xhml
......
</h:head>
<h:body>
<h:form>
<!-- 取出Bean里的属性值并显示 -->
<h1>注册成功!请记住你的用户名和密码:</h1>
username:#{regFormBean.username} <br/>
password:#{regFormBean.password}
</h:form>
</h:body>
</html>
error.xhtml
.......
</h:head>
<h:body>
<p>
<h2 style="color:red;">注册出错了!请联系管理员!</h2>
</p>
</h:body>