JSF受管Bean

JSF利用JavaBean实现程序逻辑和视图的分离,受管Bean作为桥梁连接业务逻辑和UI。配置受管Bean涉及faces-config.xml文件和使用注解定义作用域。EL用于将UI组件与Bean属性绑定,包括值表达式和方法表达式。同时,受管Bean还用于处理用户注册到数据库的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值