gpt4 book ai didi

java - 如何在问题选项卡面板内渲染速度模板?

转载 作者:行者123 更新时间:2023-11-30 03:25:11 27 4
gpt4 key购买 nike

我遵循了这个极其简单的教程 https://bitbucket.org/bhushan154/jira-issue-tab-panel-tutorial/wiki/Home添加新的问题选项卡面板。它展示了如何使用 stringBuilder 将简单内容添加到页面。理想情况下,我想使用速度模板,因为它更容易使用并适本地分离逻辑。我有一个模板文件,其中包含:

<div class="mod-header">
<h3>$i18n.getText('service-now-tab-panel.label')</h3>
</div>

我尝试摆弄这个尝试让它正确显示数据,它没有做任何事情,也没有将内容渲染到问题详细信息页面上。这是 Controller ,它现在是准系统,因为我需要通过这个路障。

package com.verys.jira.plugins.panels;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.atlassian.jira.plugin.issuetabpanel.AbstractIssueTabPanel;
import com.atlassian.jira.plugin.issuetabpanel.IssueTabPanel;
import com.atlassian.jira.issue.tabpanels.GenericMessageAction;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.crowd.embedded.api.User;
import java.util.Collections;
import java.util.List;

public class ServiceNowTabPanel extends AbstractIssueTabPanel implements IssueTabPanel
{
private static final Logger log = LoggerFactory.getLogger(ServiceNowTabPanel.class);

public List getActions(Issue issue, User remoteUser)
{
return Collections.singletonList(new GenericMessageAction("" + issue.getReporter().getDisplayName() + ""));
}


public boolean showPanel(Issue issue, User remoteUser)
{

return true;
}
}

在问题选项卡面板上渲染速度模板的文档非常稀疏,几乎不存在。如果有人能好心地指出我正确的方向,那就太好了。这也是属性文件

<issue-tabpanel key="service-now-tab-panel" name="Service Now Tab Panel" i18n-name-key="service-now-tab-panel.name" class="com.verys.jira.plugins.panels.ServiceNowTabPanel">
<description key="service-now-tab-panel.description">The Service Now Tab Panel Plugin</description>
<label key="service-now-tab-panel.label">Plugin Test</label>
<order>10</order>
<resource type="velocity" name="view" location="templates/tabpanels/service-now-tab-panel.vm"/>
<supports-ajax-load>true</supports-ajax-load>
</issue-tabpanel>

最佳答案

为了渲染速度模板,您需要导入 5 个类。

import com.atlassian.jira.config.properties.APKeys;
import com.atlassian.jira.config.properties.ApplicationProperties;
import com.atlassian.jira.util.VelocityParamFactory;
import com.atlassian.velocity.VelocityManager;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.config.properties.APKeys;

在函数内部,您需要初始化 ComponentAccessor 并获取应用程序属性

ApplicationProperties ap = ComponentAccessor.getApplicationProperties();

一旦您拥有应用程序属性“ap”,您就可以获得 Velocity 管理器所依赖的应用程序 key 。

String baseUrl = ap.getString(APKeys.JIRA_BASEURL);
String webworkEncoding = ap.getString(APKeys.JIRA_WEBWORK_ENCODING);

一旦获得了 baseUrlwebworkEncoding,您就可以开始初始化 VelocityManagerVelocityParamFactory这两个类允许您创建一个管理器,该管理器允许您对模板进行编码或获取模板的主体以及获取每个速度模板的默认参数。

VelocityManager vm = ComponentAccessor.getVelocityManager();
VelocityParamFactory vp = ComponentAccessor.getVelocityParamFactory();

初始化后,您应该创建一个上下文值的Map,并将其分配给VelocityParamFactory,以便您获取和设置每个模板的参数。您可以传入稍后在速度模板中使用的值。

Map context = vp.getDefaultVelocityParams(); 

通过使用您之前设置的 map context,您可以开始使用稍后在速度模板中使用的put方法为上下文变量赋值.

context.put("testVariable", ["Value can be a string or an array or a collection"]);

一旦您假设您想要渲染速度模板,您可以使用 getBody 方法或 getEncodedBody 方法。两者本质上做同样的事情,但工作方式却截然不同。我建议阅读如何使用每一个以及哪个用例对于 或 是正确的。

String renderedText = vm.getEncodedBody("templates/", "service-now-tab-panel.vm", baseUrl, webworkEncoding, context);

您需要设置templatePathtemplateFilebaseUrlwebWorkEncoding,最后是 context 其中包含您放入上下文中的任何参数,这些参数随后将在速度模板中以字符串形式返回到变量 renderedText

根据您在 Jira 中执行的操作方式和内容,有几种不同的方法可以将其传递到您的 View 。我将把它留给你去弄清楚,但我创建一个 IssueTabPanel 的目的是将其呈现如下:

return Collections.singletonList(new GenericMessageAction( renderedText ));

所以所有的 ti 应该看起来像这样:

ApplicationProperties ap = ComponentAccessor.getApplicationProperties();
String baseUrl = ap.getString(APKeys.JIRA_BASEURL);
String webworkEncoding = ap.getString(APKeys.JIRA_WEBWORK_ENCODING);

VelocityManager vm = ComponentAccessor.getVelocityManager();
VelocityParamFactory vp = ComponentAccessor.getVelocityParamFactory();

Map context = vp.getDefaultVelocityParams();
context.put("test", "test");

String renderedText = vm.getEncodedBody("templates/", "service-now-tab-panel.vm", baseUrl, webworkEncoding, context);

return Collections.singletonList(new GenericMessageAction(renderedText));

这是我通过研究得出的对其工作原理的理解。这可能不是最好的方法,也可能不是绝对正确的方法,但是这个方法会起作用!如果有人需要添加任何内容以使其更清晰、更彻底,请对其进行编辑或将其变成 wiki。

关于java - 如何在问题选项卡面板内渲染速度模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30429303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com