读书人

struts 二 的SessionAware接口使用

发布时间: 2012-07-01 13:15:00 作者: rapoo

struts 2 的SessionAware接口使用

?

使用ActionContext获得session会带来单元测试不好作,所以使用SessionAware可以用通过的Map对象来注入session,这样在单元测试的时候只需要创建一个Map就可以了。这是一种比较推荐的做法

LogionAction.java文件如下:

?

package com.xujun.webwork.action;import com.opensymphony.xwork.Action;import com.opensymphony.webwork.interceptor.SessionAware;import java.util.Map;public class LoginAction implements Action,SessionAware{private Map mySession;public String execute() throws Exception{mySession.put("username", "xujunSessionAware");return this.SUCCESS;}public void setSession(Map session) {this.mySession = session;}}
?

?

xwork.xml配置如下,注意interceptor-ref 名称的大小写:

?

<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN""http://www.opensymphony.com/xwork/xwork-1.0.dtd"><xwork><include file="webwork-default.xml" /><package name="default" extends="webwork-default"><action name="login" type="dispatcher"><param name="location">/main.jsp</param></result><interceptor-ref name="completeStack"></interceptor-ref></action></package></xwork>
?

?

main.jsp文件如下:

?

<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="ww" uri="webwork"%><html><body><p align="center">Login Success!</p><p align="center">Welcome!<ww:property value="#session['username']"/></p></body></html>
?

?

? ?在一个项目中可能会有很多action都需要用到session,如果每个action都来实现org.apache.struts2.interceptor.SessionAware这个接口,可能会显得比较麻烦,所以建议作一个抽象的BaseAction类来实现org.apache.struts2.interceptor.SessionAware接口,以后所有的action只要继承这个BaseAction就可以了。

? ? 如果user里存在isAdmin的方法,在jsp中可以通过<s:if?test="#session.user.admin">来判断用户有没有管理权限,通过<s:property value="#session.user.userName">或者来取得用户名.

?

读书人网 >软件架构设计

热点推荐