在创建一个Issue的时候,如果不指定经办人,经办人会默认为项目的负责人,如果希望经办人默认为Issue创建时的报告人或者当前登录用户,那该怎么办,因为很少有人会主动在创建issue的时候在经办人那点击分配给我或者分配给真正正确的人,这样我们不得不做一些额外的操作去实现这一要求,最开始的思路是通过监控器监听issue创建事件,然后捕获到该事件之后立即修改该issue的经办人属性,但是事件执行完之后,经办人又被创建时的值覆盖了,接着又试着让修改issue经办人的代码线程休眠几秒后再做执行,依然没有成功。失望之余,我想到了拦截器,jira插件开发书中倒是提到过servlet filter,于是通过代码试验,终于用filter方式实现了修改默认经办人的功能
首先需要在atlassian-plugin.xml文件中配置一个filter
<servlet-filter key="user-assign-filter" class="com.company.jira.filter.UserAssignFilter" location="before-dispatch" weight="200">
<description>用户指派过滤器</description>
<url-pattern>/secure/QuickCreateIssue.jspa*</url-pattern>
</servlet-filter>
通过Firefox的firebug工具捕获到了/secure/QuickCreateIssue.jspa*的请求
在创建issue的时候如果没有设置经办人,那么经办人的值为-1,当然在issue的创建的后台会被置成项目的负责人,所以思路有了,就是要在过滤器这里修改掉assignee的值
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
String assignee = servletRequest.getParameter("assignee");
String reporter = servletRequest.getParameter("reporter");
if ("-1".equals(assignee)) { //-1代表默认值
HashMap map = new HashMap(servletRequest.getParameterMap());
map.put("assignee", new String[]{reporter});
ParameterRequestWrapper wrapRequest = new ParameterRequestWrapper((HttpServletRequest) servletRequest, map);
filterChain.doFilter(wrapRequest, servletResponse);
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
由于servletRequest.getParameterMap()这个map中的值无法修改,只好通过自定义一个ParameterRequestWrapper对象来解决
public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map params;
public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {
super(request);
this.params = newParams;
}
public Map getParameterMap() {
return params;
}
public Enumeration getParameterNames() {
Vector v = new Vector(params.keySet());
return v.elements();
}
public String[] getParameterValues(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
return (String[]) v;
} else if (v instanceof String) {
return new String[]{(String) v};
} else {
return new String[]{v.toString()};
}
}
public String getParameter(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
String[] strArr = (String[]) v;
if (strArr.length > 0) {
return strArr[0];
} else {
return null;
}
} else if (v instanceof String) {
return (String) v;
} else {
return v.toString();
}
}
}
- 大小: 51.5 KB
分享到:
相关推荐
c++ issue c++ issuec++ issuec++ issuec++ issue
IssueTracker Issue Tracker 问题跟踪系统, Issue-Tracker is a support issue tracking system written in asp.net 2.0 , with MSSQL backend. The system is designed to be user friendly,simpley use Issue-...
Case frame, profitability business situation, issue tree
ETS官方Issue范文,including from score 6 to score 1
普通开发人员可以创建issue后建立对应的分支然后去完成任务。完成issue后便要合并分支,只需发送merge request ,等待owner审核通过才能合并到master分支上。合并的过程中可能会出现代码冲突问题。而这个问题却交给...
GR-63-CORE ISSUE 3 說明
因公司需要一个小巧易用的项目问题管理工具来跟踪公司网站的修改,于是想到 ASP.NET Issue Tracker Starter Kit 并将其中文化并修正了在使用 Access 数据库时保存和执行查询的一些问题。希望你喜欢。 <br>运行 ...
全面介绍了以太网的相关知识,包括以太网的物理层、数据链路层、VLAN、千兆以太网、生成树协议等等。
到现在为止有用的issue最新素材,包括老虎伍兹,朝核问题等等
TR-114 VDSL2 Performance Test Plan Issue: 3 Amendment 4 Issue Date: June 2018
redmine使用jmeter批量创建issue
经典的GRE作文教材,不用多介绍了。GRE写作5.5·ISSUE篇PART1(共3卷)
security issue in wireless mesh network
此库为您的应用程序提供问题报告功能。
gitblog 这是一个极轻量级的,基于git issue的个人博客模板,非常适合于想在GitHub pages上搭建个人博客的人。
电子设备可靠性预测标准,Telcordia_SR-332 Issue 4 。
写在前面的话:最好的备考方式,理应是对每道题进行思考、提纲,再精选 20-30 道题进行全文练习。写作部分完整的备考时间以 1-1.5 个月为宜。考满分作文系列
s1000d_Issue_4_0 S1000D 标准
Full Circle杂志英文版第31期
新GRE_ISSUE写作论证论据素材大全》第二大类_行为类_素材电子版