2012-04-11 468 views
5

我有一個枚舉像這樣用Java編寫的:顯示枚舉描述jqGrid的,而不是枚舉

public enum Status 
{ 
    ACTIVE("Active"), IN_ACTIVE("InActive"); 

    Status(String desc) 
    { 
    this.description = desc; 
    } 

    private String description; 

    public String getDescription() 
    { 
    return description; 
    } 

    public void setDescription(String desc) 
    { 
    this.description = desc; 
    } 
} 

此枚舉是在jqGrid的屬性。但它總是顯示enum,即ACTIVE或IN_ACTIVE。我想讓jqgrid顯示Active和InActive。 謝謝

+0

你可以發佈定義jqGrid的JavaScript代碼嗎?你使用'formatter:'select''(見[這裏](http://www.trirand.com/jqgridwiki/doku.php?id=wiki:predefined_formatter#formatter_type_select))?你能提供服務器響應內部的狀態和狀態描述之間的映射嗎?如果您以返回服務器的JSON/XML數據爲例(只有一行數據就足夠了),這將會很有幫助。 – Oleg 2012-04-11 22:20:01

回答

2

你可以寫一個custom formatter來實現這一點。例如:

formatStatus: function (cellvalue, options, rowObject){ 
    if (cellvalue == "ACTIVE") 
     return "Active"; 
    return "InActive"; 
} 

然後確保使用格式化從colmodel:

{name: 'status', formatter: formatStatus, ...}, 

這是否幫助?

+0

感謝您的回覆。這一定會奏效。但我不想在腳本文件或jsp中重新定義enum的描述。沒有辦法在枚舉上調用getDescription()以獲得描述。原因是,如果我需要做出改變,說主動激活,我只會在一個地方。謝謝 – 2012-04-11 14:05:48

+0

@Uchenna - 根據你的代碼的結構,你可以在頁面上寫出變量的值,然後在格式化程序中使用這些變量。例如:'return ActiveStatusValue;' – 2012-04-11 14:09:41

+0

好的。我認爲這很好。有沒有其他的方式來實現相同的。因爲我在想,如果可以在像user.username這樣的網格上使用javabean屬性,爲什麼不能用enum來做同樣的事情。只是一個想法。謝謝 – 2012-04-11 14:18:31

1

都有一個toString()在你的枚舉實施如下

public toString() { 
    return description; 
} 

這將確保您的JSON響應有說明,而不是枚舉名稱。

+0

這種方法本來是最好的選擇。但這裏的問題是,我在HTML選擇中使用相同的枚舉。因此,在修改表單時,select將呈現enum的描述來代替select選項的value屬性。所以解密被提交給服務器而不是枚舉。希望你明白這一點。 – 2012-04-14 18:34:45