Struts注解插件和struts-Json插件都默认继承struts-default包,导致无法同时使用注解,因为Action类只能有一个父包,配置其中一个都会把另一个给覆盖掉,嘿嘿,不用担心,只需要把struts-json插件中的默认配置都拷到struts.xml配置文件即可
配置步骤:
一、查看struts-json插件中的默认配置文件:struts-plugin.xml代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="json-default" extends="struts-default">
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<interceptors>
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
<interceptor name="jsonValidation" class="org.apache.struts2.json.JSONValidationInterceptor"/>
<!-- Sample JSON validation stack -->
<interceptor-stack name="jsonValidationWorkflowStack">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel</param>
</interceptor-ref>
<interceptor-ref name="jsonValidation"/>
<interceptor-ref name="workflow"/>
</interceptor-stack>
</interceptors>
</package>
</struts>
二、把上面配置信息全部都拷到struts.xml中
1>我的拦截器代码,一个简单的登录拦截器:LoginInterceptor.java
package com.kaishengit.web.interceptor;
import java.util.Map;
import java.util.Set;
import com.kaishengit.pojo.Employee;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.util.TextParseUtil;
public class LoginInterceptor extends AbstractInterceptor{
private static final long serialVersionUID = 1L;
private String excludeActionName;//剔除的拦截方法
private String sessionName;//用户名在session中存放的key值
@Override
public String intercept(ActionInvocation invocation) throws Exception {
String actionName = invocation.getProxy().getActionName();//获取当前访问的action名字
Set<String> set = TextParseUtil.commaDelimitedStringToSet(excludeActionName);
if(set.contains(actionName)){
return invocation.invoke();
}else{
Map<String, Object> session = invocation.getInvocationContext().getSession();
Employee employee = (Employee) session.get(sessionName);
if(employee == null){
return "login";//没有登录,跳转到登录页
}else{
return invocation.invoke();
}
}
}
//get set
public String getExcludeActionName() {
return excludeActionName;
}
public void setExcludeActionName(String excludeActionName) {
this.excludeActionName = excludeActionName;
}
public String getSessionName() {
return sessionName;
}
public void setSessionName(String sessionName) {
this.sessionName = sessionName;
}
}
2>配置struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<constant name="struts.convention.result.path" value="/WEB-INF/views"/>
<!--配置Struts-convention注解的默认父包 -->
<constant name="struts.convention.default.parent.package" value="myPackage"/>
<!--继承Struts-convention注解插件的xml -->
<package name="myPackage" extends="convention-default">
<!-- 把Struts-json插件默认配置文件代码全部有序copy过来 -->
<!-- json -->
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<interceptors>
<interceptor name="loginInterceptor" class="com.kaishengit.web.interceptor.LoginInterceptor"/>
<!-- json -->
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
<interceptor name="jsonValidation" class="org.apache.struts2.json.JSONValidationInterceptor"/>
<!-- 拦截器栈名采用Struts-json插件的栈名 -->
<interceptor-stack name="jsonValidationWorkflowStack">
<interceptor-ref name="loginInterceptor">
<param name="sessionName">employee</param>
<param name="excludeActionName">index,login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<!-- json -->
<interceptor-ref name="basicStack"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel</param>
</interceptor-ref>
<interceptor-ref name="jsonValidation"/>
<interceptor-ref name="workflow"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="jsonValidationWorkflowStack"/>
<global-results>
<result name="login" type="redirectAction">index.action</result>
</global-results>
</package>
</struts>
三、注解使用Json,一个例子
package com.kaishengit.action;
import java.util.ArrayList;
import java.util.List;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import com.kaishengit.pojo.Employee;
import com.kaishengit.pojo.FileType;
import com.kaishengit.pojo.Message;
import com.kaishengit.pojo.Project;
import com.kaishengit.service.EmployeeService;
public class CopyOfAjaxAction extends BaseAction{
private static final long serialVersionUID = 1L;
private EmployeeService employeeService;
private List<Employee> employeeList;
private Employee employee;
private String id;
private Message message;
private Project project;
private FileType fileType;
/**
* 显示employee
*/
//注解使用方式↓
@Action(value="employeeJson",results={@Result(name="success",params={"root","employeeList","noCache","true","enableGZIP","true","excludeNullProperties","true"},type="json")})
public String execute(){
employeeList = employeeService.findAll();
//定制json
List<Employee> jsonList = new ArrayList<Employee>();
for (Employee employee : employeeList) {
Employee jsonEmployee = new Employee();
jsonEmployee.setId(employee.getId());
jsonEmployee.setUsername(employee.getUsername());
jsonList.add(jsonEmployee);
}
employeeList = jsonList;
return "success";
}
//get set
public List<Employee> getEmployeeList() {
return employeeList;
}
public void setEmployeeList(List<Employee> employeeList) {
this.employeeList = employeeList;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public Message getMessage() {
return message;
}
public void setMessage(Message message) {
this.message = message;
}
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
public FileType getFileType() {
return fileType;
}
public void setFileType(FileType fileType) {
this.fileType = fileType;
}
@Autowired
public void setEmployeeService(EmployeeService employeeService) {
this.employeeService = employeeService;
}
}
end...
分享到:
相关推荐
Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)
STRUTS2:拦截器Interceptor
简单的拦截器例子,适合初学者学习,也是一个备忘录
Struts2.3.6实现自定义拦截器Interceptor http://blog.csdn.net/alanchen520/article/details/34086699
struts2 Interceptor拦截器 http://whitewolf.0fees.net
利用反射和动态代理机制实现自定义拦截器Interceptor http://blog.csdn.net/alanchen520/article/details/34087833
在struts2中使用拦截器(Interceptor)控制登录和权限[汇编].pdf
其中,init和destroy方法会在程序开始和结束时各执行一遍,不管使用了该拦截器与否,只要在struts.xml中声明了该Struts2拦截器就会被执行。 intercept方法就是拦截的主体了,每次拦截器生效时都会执行其中的逻辑。
注意:flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-...
flume拦截器 保留binlog es、data、database、table、type字段 分区字段名称: eventDate 放入 /opt/cloudera/parcels/CDH/lib/flume-ng/lib目录重启flume即可
struts2 拦截器_教程.zip
logging-interceptor-3.14.4的jar包,用于okhttp网络拦截器
在struts2框架中主配置文件struts-defalut.xml 文件中定义了大量的拦截器和拦截器栈。通过 default-interceptor-ref元素定义了 当前应用的默认拦截器栈,对用户的每次请求都需要调用拦截器栈中的每个拦截器来拦截...
Postman-Interceptor下载
struts2,Interceptor struts2拦截器实例,两套实例,一套是针对单个的action配置的,另一套实例是针对全局的action配置的拦截器interceptor
一个用于修改 ajax 请求响应的 chrome 扩展,修改ajax请求数据
拦截器和过滤器的区别 1、拦截器基于动态代理 , 过滤器基于函数回调 2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求...
ssh2-interceptor拦截器(权限管理).
logging-interceptor-3.8.1.jar , okhttp网络拦截器;调整积分为1分
maven3-interceptor-3.0.0-1-sources.jar