加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

用JSF实现依赖注入

发布时间:2020-05-23 02:20:23 所属栏目:程序设计 来源:互联网
导读:无意中看到JSF中的Managed Properties,不禁突发奇想: 用JSF能实现依赖注入吗?理论上是可以通的,于是开始了自己的尝试,只是写一个简单的Login页面. 首先,写一个IUserService的接口,接口中只有属性方法: getUsername, getPassword, setUsername, setPassword四

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

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

package net.moon.service;

public interface IUserService ... {
StringgetUsername();
StringgetPassword();
voidsetUsername(Stringusername);
voidsetPassword(Stringpassword);
}

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

package net.moon.model;

import net.moon.service.IUserService;

public class UserInfo implements IUserService ... {
privateStringusername;
privateStringpassword;
/***//**
*@returntheusernmae
*/
publicStringgetUsername()...{
returnusername;
}
/***//**
*@paramusernmaetheusernmaetoset
*/
publicvoidsetUsername(Stringusernmae)...{
this.username=usernmae;
}
/***//**
*@returnthepassword
*/
publicStringgetPassword()...{
returnpassword;
}
/***//**
*@parampasswordthepasswordtoset
*/
publicvoidsetPassword(Stringpassword)...{
this.password=password;
}
}

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

package net.moon.business;

import net.moon.service.IUserService;

public class UserBO ... {

IUserServiceuser;

publicStringlogin()...{
Stringresult="FAILED";
//System.out.println(result);
if(user.getUsername().equalsIgnoreCase("admin")
&&user.getPassword().equals("password"))...{
result="PASS";
}
returnresult;
}

/***//**
*@returntheuser
*/
publicIUserServicegetUser()...{
returnuser;
}

/***//**
*@paramusertheusertoset
*/
publicvoidsetUser(IUserServiceuser)...{
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页面,代码如下:

<% ... @pagecontentType="text/html;charset=UTF-8" %>
<% ... @tagliburi="http://java.sun.com/jsf/html"prefix="h" %>
<% ... @tagliburi="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 ="UserName:" ></ 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,代码如下:


<% ... @pagecontentType="text/html;charset=UTF-8" %>
<% ... @tagliburi="http://java.sun.com/jsf/html"prefix="h" %>
<% ... @tagliburi="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下测试通过.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读