2015-04-08 41 views
0

我正在爲jira開發一個包含自定義字段類型的插件。 該字段是一個選擇,必須填寫選項。我通過Jira方法getVelocityParameters()提供這些選項。與Jira在速度模板中調用Java方法的問題

@Override 
public Map<String, Object> getVelocityParameters(Issue issue, 
     CustomField field, FieldLayoutItem fieldLayoutItem) { 

    Map<String, Object> map = super.getVelocityParameters(issue, field, fieldLayoutItem); 
    map.put("customOptions", getCustomOptions()); 

    return map; 
} 

getCustomOptions()返回一個帶有我需要的選項的Hashtable。

訪問和顯示這些選項,我用的模板#foreach循環:而不是顯示返回的對象也只是簡單地顯示文本本身的

#foreach($customOption in $customOptions) 
     <option id="$customOption.Id" value="$customOption.Value"> 
       $customOption.Label 
     </option> 
    #end 

,只有「$ customOption.Id」是正確顯示。 而只寫「$ customOption」則顯示對象的整個引用。 所以我可以訪問對象和它的id,但不是其他屬性。

Id是一個int,而標籤和值是Strings。

我搜索解決方案,並嘗試不同的東西來解決這個問題,比如: $ customOption.Label,$,$ {} customOption.Label,$ customOption.getLabel()

!{customOption.Label!}

我在這裏找不到問題,因爲這個ID工作正常。

Sry for broken english。

+0

方法返回NULL因此被正確地顯示任何內容。我假設了一個Exception或一個「」,而不是隻顯示「$ customOption.Label」。反正ty。 – Don

回答

0

因爲您使用地圖。因此,請嘗試以下操作:

#foreach($customOption in $customOptions) 
    #if ($customOption) 
    #foreach ($co in $customOption.keySet())      
     $customOption[$co]   
    #end 
    #end 
#end 
+0

感謝您的幫助,但問題似乎是一些包含NULL的值。 Sry打擾你。您的解決方案幫助我發現問題。 – Don

+0

@Joromo你嘗試檢查'NULL',我剛剛更新:-) –

0

如果您的問題沒有值,Velocity將顯示源。

E.g.如果你想獲得一個自定義字段值,你應該檢查該值,如果沒有設置,你可以加載默認值或者忽略它。

0

我想你應該看看Velocity只會顯示一個字段值,如果它的類有一個公共的get方法的話。

說到customOption是類X的對象,那麼類X必須有一個返回標籤的public get()方法。

如果標籤字段是類X的公共字段並不重要,則必須使用public get()方法。

You can have a look at this for reference: