用JSF实现依赖注入

原创 2007年09月12日 15:44:00

  无意中看到JSF中的Managed Properties,不禁突发奇想: 用JSF能实现依赖注入吗?理论上是可以通的,于是开始了自己的尝试,只是写一个简单的Login页面.

 首先,写一个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>

 

 

以上代码在JDK 1.6, JSF 1.2, Tomcat 6.0下测试通过.

版权声明:本文为博主原创文章,未经博主允许不得转载。

@Inject

你可以用 @Inject 注解告诉container:”我需要一个bean,请您帮我创建一个放在这里,谢谢!“。 在实例化这个类时,container就会把你需要的bean创建(或者找出来)给你放好。...

用Roboguice实现依赖注入

  • 2015年10月07日 14:22
  • 1.55MB
  • 下载

用Dagger2在Android中实现依赖注入

用Dagger2在Android中实现依赖注入 依赖注入这个模式(模式已经用烂了,这里再烂一次)是用来给应用的各部分解耦的。使应用开发更加可扩展,更容易维护。通过本文你会学到如何使用Dagger2来处...

Java代码实现依赖注入

  • 2009年12月20日 12:09
  • 309KB
  • 下载

Roboguice实现依赖注入

  • 2014年03月11日 14:38
  • 1.55MB
  • 下载

Spring如何实现自动依赖注入-------autowire

【问题描述】当我们在使用Spring的IOC功能的时候,Spring提供了集中注入方式:属性注入,构造函数注入和工厂方法注入,我们更多的时候是使用的属性注入,即set方法注入。使用set方法注入要求我...

Unity MVC实现依赖注入实例

  • 2013年09月05日 09:24
  • 1.83MB
  • 下载

如何实现Spring依赖注入 AOP.rar

  • 2008年09月18日 09:39
  • 34KB
  • 下载

[AngularJS面面观] 14. 依赖注入 --- module的定义与实现

从本篇文章开始,会开始系统性地介绍angular是如何实现依赖注入这一重要特性的。 ##引言 提到依赖注入,有后端背景的开发人员应该不会陌生。比如对于Java开发人员而言,绝大部分都是通过Spri...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用JSF实现依赖注入
举报原因:
原因补充:

(最多只允许输入30个字)