爪哇一角

共同探讨STRUTS#HIBERNATE#SPRING#EJB等技术
posts - 3, comments - 6, trackbacks - 0, articles - 99
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

二 JSF JavaBean

Posted on 2009-01-20 14:46 非洲小白脸 阅读(244) 评论(0)  编辑  收藏 所属分类: JSF

1.JSF JavaBean介绍

JSF使用 JavaBean 来达到程式逻辑与视图分离的目的,在JSF中的Bean其角色是属于Backing Bean,又称之为Glue Bean。

作用是在真正的业务逻辑Bean及UI元件之间搭起桥梁,相当于STRUTS中的FormBean,对页面的值进行存储。

JSF将Bean的管理集中在faces-config.xml中,上面介绍的JSF的例子如下:

<!-- bean定义 -->

    <managed-bean>

        <managed-bean-name>user</managed-bean-name>

         <managed-bean-class>test.UserBean</managed-bean-class>

        <managed-bean-scope>session</managed-bean-scope>

    </managed-bean>

<managed-bean-class>设定所要使用的Bean类别,<managed-bean-name>设定之名称,

<managed-bean-scope>设定Bean的存活范围,您可以设定为request、session 与application,设定为request时,Bean的存活时间为请求阶段。

您还可以将存活范围设定为none,当设定为none时会在需要的时候生成一个新的Bean,例如您在一个method中想要生成一个临时的Bean,就可以将之设定为none。

 

如果有必要在启始Bean时,自动设置属性的初始值,则可以如下设定:

....
<managed-bean>
  <managed-bean-name>user</managed-bean-name>
    <managed-bean-class>
      test.UserBean
    </managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
      <property-name>name</property-name>
      <value>caterpillar</value>
    </managed-property>
    <managed-property>
      <property-name>password</property-name>
      <value>123456</value>
    </managed-property>
</managed-bean>
.... 

您的属性不一定是字串值,也许会是int、float、boolean等等型态,您可以设定<value> 值时指定这些值的字串名称,JSF会尝试进行转换。

 

您也可以将其它产生的Bean设定给另一个Bean的属性,例如:

<managed-bean>

<managed-bean-name>user</managed-bean-name>

<managed-bean-class>test.UserBean</managed-bean-class>

<managed-bean-scope>session</managed-bean-scope>

</managed-bean>

<managed-bean>

<managed-bean-name>userinfo</managed-bean-name>

<managed-bean-class>test.UserBeanInfo</managed-bean-class>

<managed-bean-scope>session</managed-bean-scope>

<managed-property>

<property-name>userBean</property-name>

<property-class>test.UserBeanService</property-class>

<value>#{user}</value>

</managed-property>

</managed-bean>

UserBeanInfo里面定义了变量userBean,变量userBean的类型是类UserBean,这里就把变量userBean直接赋值为#{user}。

 

2.JSF JavaBean示例(反向注入)

其实通常我们所说的反向注入(Ioc)就是这个,这也是JSF和STRUTS一个非常大的区别,JSF支持反向注入,它可以更好的管理业务Bean的对象。

下面举个例子:

在配置文件中:

<managed-bean>

<managed-bean-name>userinfo</managed-bean-name>

<managed-bean-class>test.UserBeanInfo</managed-bean-class>

<managed-bean-scope>session</managed-bean-scope>

<managed-property>

<property-name>userBean</property-name>

<property-class>test.UserBeanService</property-class>

<value>#{user}</value>

</managed-property>

</managed-bean>

这样,当UserBeanInfo的实例建立的时候,就会自动将UserBeanService的对象赋值给UserBeanInfo实例的变量userBean。

JsfBeanExample.jsp

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

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

<%@page contentType="text/html;charset=utf-8"%>

<html>

<head>

<title>JSF JavaBean示例(反向注入)</title>

</head>

<body>

<f:view>

       <h:form>

              <h3>请输入您的名称</h3>

              <h:outputText value="#{user.errMessage}" style="color:red"/><p>

              <!-- 姓名 -->

              名称: :<h:inputText value="#{user.name}" />

              <p>密码:<h:inputSecret value="#{user.password}"/>

             

              <p><h:commandButton value="送出"

                     action="#{userinfo.verify1}" />

       </h:form>

</f:view>

</body>

</html>

 

UserBeanInfo.java:

package test;

public class UserBeanInfo {

       UserBeanService userBean;

       public String verify1() {

              if (!userBean.getName().equals("sunlin")

                            || !userBean.getPassword().equals("123456")) {

                     userBean.setErrMessage("名称或者密码错误1(依赖注入实现)");

                     return "failure";

              } else {

                     return "success";

              }

       }

       /**

        * userBean をセットする

        * @param userBean the userBean to set

        */

       public void setUserBean(UserBeanService userBean) {

              this.userBean = userBean;

       }

}

UserBeanInfo的类里面并没有绑定页面输入的信息,页面输入的信息是绑定在Userbean中的。但是我们在faces-config.xml配置文件中设置了反向注入,

UserBeanService直接设置到UserBeanInfo的变量userBean里,所以在类UserBeanInfo中可以直接取得Userbean中的信息进行Check。

▲注意:UserBeanInfo中必须要定义setUserBean()方法。

http://localhost:8080/jsfTest/pages/jsfBeanExample.faces 当你用户名或者密码出错的时候,Message就会显示在页面上。

 


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


网站导航: