我用网络工作操作和项目选项卡模块制作了自己的插件(单独的)。但现在我需要将两者结合起来:将有一些组合框和一个按钮使插件计算统计数据。我需要在同一个项目选项卡中显示它。
我两个步骤都有问题:
-
将显示如何执行任何Java代码BEFORE项目选项卡,并生成此页面的内容,其中包含Java代码将从userManager、groupManager等检索到的信息(用用户名填充组合框)。
-
如何在用户按下"计算!"按钮后在同一页面上输出新信息(为所选用户计算统计数据)。
我想我需要在我的项目面板选项卡上重新定义一些方法(类似于"renderPage")。
对于您的第一个问题:
看看:项目选项卡面板模块
您必须在那里设置的类负责呈现项目选项卡面板。在正常情况下,您会在那里渲染一些速度模板。看看VersionsProjectTabPanel实现的一个接口(com.atlassian.jira.plugin.browsepanel.TabPanel)。在那里你会发现一个名为getHtml(…)的方法。jira会在面板显示在网页上之前调用这个方法。
那么你必须做的是:
- 定义一个实现TabPanel接口的类,并在atlassian-plugin.xml中的项目选项卡面板模块描述符中设置该类
- 使用自己的模板呈现过程覆盖方法getHtml(…)
-
在覆盖的方法中,您必须获得VelocityManager:的参考
VelocityManager velocityManager = ComponentManager.getInstance().getVelocityManager();
-
编写速度模板并用getBody(…)渲染方法:
String renderedText = velocityManager.getBody("<PATH_TO_TEMPLATE>", "templatename.vm", context);
-
如果您想将内容传递给该模板,请通过getBody(…)方法的上下文变量来实现。地图的类型为
Map<Object, Object>
。通常你会在里面放一个字符串/对象条目。Key String将在模板中声明为变量,Value Object是变量的值:Map<String, Object>
-
将renderedText作为返回值提供给getHtml(…)的调用方,它将显示在页面上。
一些问答;A和该主题的教程页面:
- 在Jira插件中使用Velocity模板
- Velocity模板
对于您的第二个问题:
只需在速度模板中声明一个<form>...</form>
标签。其中的action属性应该指向您的网络工作操作url。在您覆盖的getHtml(…)方法中,您必须通过Servlet ActionContext:访问HttpServlet请求上下文
HttpServletRequest request = ServletActionContext.getRequest();
String someRequestParam = request.getParameter("paramName");
通过我们之前谈到的模板上下文映射将请求参数内容传递到您的速度模板,或者使用它进行一些业务逻辑。