You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将select2选中值传递到Jira插件的Java后端代码中

实现方案

第一步:前端JS代码改造(AJAX传参)

你当前用的click事件不对,会在点击下拉框还没选值的时候就触发,建议换成change事件,选中值变化时才发起请求,改造后代码如下:

// 监听select2选中值变化事件
AJS.$('#select2-example2').on('change', function () {
    const selectedProjectKey = AJS.$(this).auiSelect2('val');
    // 跳过空选中的情况
    if (!selectedProjectKey) return;
    
    // 发起AJAX请求到后端REST接口
    AJS.$.ajax({
        // 路径要和后端REST配置一致,示例中的jira-issue-demo替换为你自己的插件key
        url: AJS.contextPath() + '/rest/jira-issue-demo/1.0/get-project-issues',
        type: 'POST',
        data: {
            projectKey: selectedProjectKey
        },
        dataType: 'json',
        success: function (res) {
            if (res.success) {
                // 将返回的issue数据填充到datatable,#your-datatable-id替换为你自己的表格ID
                AJS.$('#your-datatable-id').DataTable().clear().rows.add(res.issues).draw();
            } else {
                console.error('查询失败:', res.msg);
            }
        },
        error: function (err) {
            console.error('请求接口失败', err);
        }
    });
});

第二步:后端Java REST端点实现

1. 先在插件配置文件atlassian-plugin.xml中添加REST模块声明

<rest key="rest-endpoint" path="jira-issue-demo" version="1.0">
    <description>项目Issue查询REST接口</description>
</rest>

注意上面的path属性值jira-issue-demo要和前端AJAX请求路径里的插件标识保持一致。

2. 编写REST接口Java类

import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.project.Project;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.plugin.spring.scanner.annotation.imports.JiraImport;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Path("/get-project-issues")
@Produces({MediaType.APPLICATION_JSON})
public class ProjectIssueResource {

    @JiraImport
    private final SearchService searchService;

    // 构造注入Jira搜索服务
    public ProjectIssueResource(SearchService searchService) {
        this.searchService = searchService;
    }

    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public Response getIssuesByProjectKey(@FormParam("projectKey") String projectKey) {
        Map<String, Object> result = new HashMap<>();
        List<Map<String, String>> issueList = new ArrayList<>();

        try {
            // 获取当前登录用户
            ApplicationUser currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();
            // 根据项目key查询项目
            Project project = ComponentAccessor.getProjectManager().getProjectByKey(projectKey);
            if (project == null) {
                result.put("success", false);
                result.put("msg", "项目不存在");
                return Response.ok(result).build();
            }

            // 编写JQL查询项目下的所有Issue,可根据需求调整查询条件
            String jql = "project = " + projectKey + " ORDER BY created DESC";
            SearchService.ParseResult parseResult = searchService.parseQuery(currentUser, jql);
            if (parseResult.isValid()) {
                List<Issue> issues = searchService.search(currentUser, parseResult.getQuery(), SearchService.PAGER_UNLIMITED).getIssues();
                // 封装前端需要的Issue键和摘要字段
                for (Issue issue : issues) {
                    Map<String, String> issueMap = new HashMap<>();
                    issueMap.put("key", issue.getKey());
                    issueMap.put("summary", issue.getSummary());
                    issueList.add(issueMap);
                }
            }

            result.put("success", true);
            result.put("issues", issueList);
        } catch (Exception e) {
            result.put("success", false);
            result.put("msg", e.getMessage());
        }
        return Response.ok(result).build();
    }
}

注意事项

  • 如果你的插件启用了Spring扫描,需要给上述REST类加@Component注解,否则需要在atlassian-plugin.xml中手动注册该类
  • datatable的列配置要和后端返回的key、summary字段名对应,否则数据无法正常渲染
  • 如果允许未登录用户访问该接口,可以在REST方法上加@AnonymousAllowed注解

内容的提问来源于stack exchange,提问作者alimertkoc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:09:03