2015-05-24 1 views
0

Я выполнил этот чрезвычайно простой учебник 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> 

Я попытался fiddeling вокруг с этим пытаясь получить его, чтобы отобразить данные надлежащим образом, он ничего не делает и не делает из контента на странице вопрос подробно. Вот контроллеры, это просто бобовые кости, так как мне нужно пройти этот дорожный блок.

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> 

ответ

1

Для того, чтобы сделать из шаблонов скорости, нужно импортировать 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(); 

После того, как у вас есть свойства приложения «ар» вы можете получить ключи приложений, которые менеджер скорости зависит от ,

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

После того, как у вас есть ваш baseUrl & ваш webworkEncoding, то вы можете перейти на инициализацию VelocityManager & в VelocityParamFactory эти два класса позволяют одному создать менеджер, который позволяет кодировать шаблон или получить тело шаблона а также получить параметры по умолчанию для шаблона скорости.

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

После тех инициализируются вы должны создать Map значений контекста, которые отнесены к VelocityParamFactory, которые позволяют получить & установить параметры для одного шаблона. Что вы можете передать в значениях, которые будут использоваться позже в вашем шаблоне скорости.

Map context = vp.getDefaultVelocityParams(); 

Используя карту 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); 

Вы должны установить templatePath, templateFile, baseUrl, webWorkEncoding, и, наконец, в context, который содержит какой-либо из параметров, поставленных в контексте, которые затем будут возвращены в шаблоне скорости переменной renderedText в виде строки ,

В зависимости от того, как вы делаете в Джире, есть несколько способов передать это вашему представлению. Я оставлю это до вас, чтобы выяснить, но за то, что я сделал создание IssueTabPanel было вынести его как и ниже:

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

Таким образом, все вместе ти должны выглядеть так:

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)); 

Это мое понимание того, как это было сделано в результате исследований. Возможно, это не лучший способ сделать это и может быть не совсем правильным, но этот метод будет работать! Если у кого-то есть дополнения, чтобы добавить к этому, чтобы сделать его более понятным и тщательным, отредактируйте его или превратите в вики.

+0

Dyllen, вы сделали отличную работу, чтобы заставить ее работать без какой-либо документации от atlassian! Вот мой короткий учебник по этому вопросу, который я собрал на основе источников JIRA: https://answers.atlassian.com/questions/15835336/answers/15836488 –

+1

@VolodymyrKrupach Привет, спасибо, я очень ценю ваш ответ. Это безумие думать, что документация в Атлантике настолько разрежена по этому вопросу. Это мой первый плагин JIRA, поэтому я обязан ошибаться, его удивительно знать, что есть другие люди, которые сталкиваются с теми же проблемами, разрабатывая простые решения этой проблемы. Мне нравится, как вы внедрили свое гораздо лучше, поэтому я пошел дальше и переключил свой код на :)! Благодаря!! – djowinz

+1

> Вы внедрили свой Я просто посмотрел на источники JIRA и скопировал оттуда, и это то, что мы должны делать, когда нет документации :-). –

 Смежные вопросы

  • Нет связанных вопросов^_^