爪哇一角

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

简单的JSF实现依赖注入的例子

Posted on 2009-01-07 15:05 非洲小白脸 阅读(418) 评论(0)  编辑  收藏 所属分类: JSF

首先,写一个IUserService的接口,接口中只有属性方法: getUsername, getPassword, setUsername, setPassword四个方法.代码如下:

package net.moon.service;
public interface IUserService ...{
 String getUsername();
 String getPassword();
 void setUsername(String username);
 void setPassword(String password);
}

用一个类实现该接口,代码如下:

package net.moon.model;
import net.moon.service.IUserService;
public class UserInfo implements IUserService...{
 private String username;
 private String password;
 
/** *//**
  * @return the usernmae
  */
 public String getUsername() ...{
  return username;
 }

/** *//**
  * @param usernmae the usernmae to set
  */
 public void setUsername(String usernmae) ...{
  this.username = usernmae;
 }

 /** *//**
  * @return the password
  */
 public String getPassword() ...{
  return password;
 }

 /** *//**
  * @param password the password to set
  */

public void setPassword(String password) ...{
  this.password = password;
 }
}

写一个事务类,实现login功能,其中有一个类型为IUserService的域,代码如下:

package net.moon.business;

import net.moon.service.IUserService;

public class UserBO ...{

 IUserService user;
 
 public String login()...{
  String result = "FAILED";
  //System.out.println(result);
  if(user.getUsername().equalsIgnoreCase("admin")
    && user.getPassword().equals("password"))...{
   result = "PASS";
  }
  return result;
 }

 /** *//**
  * @return the user
  */

 public IUserService getUser() ...{
  return user;
 }

 /** *//**
  * @param user the user to set
  */
 public void setUser(IUserService user) ...{
  this.user = user;
 }
}


注意该类中的属性方法setUser, 其中的参数user作为IUserService的接口类型.然后就是用什么方法对user进行注入,这时候就要想到JSF中的Managed Properties.

首先在,faces-config中配置UserInfo类为MBean,代码如下:

 <managed-bean>
  <managed-bean-name>userInfo</managed-bean-name>
  <managed-bean-class>net.moon.model.UserInfo</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>

 然后将事务类UserBO也配置为MBean,代码如下:

 <managed-bean>
  <managed-bean-name>userBO</managed-bean-name>
  <managed-bean-class>
   net.moon.business.UserBO
  </managed-bean-class>

 <managed-bean-scope>request</managed-bean-scope>
  <managed-property>
   <property-name>user</property-name>
   <property-class>
    net.moon.service.IUserService
   </property-class>
   <value>#{userInfo}</value>
  </managed-property>

 </managed-bean>

为userBO这个MBean配置了一个Managed Property,也就是要求JSF在实现userBO时, 用userInfo这个MBean为其user这个域赋值,从而实现注入.

接下来就是页面的实现了,首先是login页面, 代码如下:

<%...@ page contentType="text/html; charset=UTF-8" %>
<%...@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%...@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <title></title>
 </head>
 <body>
  <f:view>
   <h:form>
  <h:panelGrid border="1" columns="2">
   <h:outputText value="User Name:"></h:outputText>
   <h:inputText value="#{userInfo.username}"></h:inputText>

   <h:outputText value="Password:"></h:outputText>
   <h:inputText value="#{userInfo.password}"></h:inputText>
   </h:panelGrid>
   <h:commandButton value="Login" action="#{userBO.login}"></h:commandButton>
 </h:form>
  </f:view>
 </body>
</html>

表示登录成功的页面welcome.jsp,代码如下:

<%...@ page contentType="text/html; charset=UTF-8" %>
<%...@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%...@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <title></title>
 </head>
 <body>
  <f:view>
   <h:form>
        <h:outputText value="Welcome , #{userInfo.username}"></h:outputText>
        </h:form>
  </f:view>
 </body>
</html>

配置导航如下:

 <navigation-rule>
  <display-name>login</display-name>
  <from-view-id>/login.jsp</from-view-id>
  <navigation-case>
   <from-action>#{userBO.login}</from-action>
   <from-outcome>PASS</from-outcome>
   <to-view-id>/welcome.jsp</to-view-id>
  </navigation-case>
  <navigation-case>
            <from-action>#{userBO.login}</from-action>
            <from-outcome>FAILED</from-outcome>
            <to-view-id>/login.jsp</to-view-id>
        </navigation-case>
 </navigation-rule>


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


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问