【问题标题】:Display Enum description in Jqgrid instead of the Enum在 Jqgrid 中显示 Enum 描述而不是 Enum
【发布时间】:2012-04-11 09:06:40
【问题描述】:

我有一个像这样用 Java 编写的枚举:

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 中的一个属性。但它总是显示枚举,即 ACTIVE 或 IN_ACTIVE。我希望 jqgrid 显示 Active 和 InActive。 谢谢

【问题讨论】:

  • 你能发布定义 jqGrid 的 JavaScript 代码吗?你使用formatter: 'select'(见here)吗?您能否提供服务器响应内的状态和状态描述之间的映射?如果您发布返回服务器的 JSON/XML 数据示例,这将很有帮助(一行数据就足够了)。

标签: jquery jqgrid struts2


【解决方案1】:

您可以写一个custom formatter 来实现这一点。例如:

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

然后确保使用您的 colmodel 中的格式化程序:

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

这有帮助吗?

【讨论】:

  • 感谢您的回复。这肯定会奏效。但我不想在脚本文件或 jsp 中重新定义枚举的描述。有没有办法在枚举上调用 getDescription() 以获得描述。原因是,如果我需要将 Active 更改为 Activated,我只会在一个地方进行更改。谢谢
  • @Uchenna - 根据您的代码结构,您可以将值写入页面上的变量,然后在格式化程序中使用这些变量。例如:return ActiveStatusValue;
  • 好的。我认为这很好。有没有其他方法可以实现相同的目标。因为我在想,如果可以在像 user.username 这样的网格上使用 javabean 属性,为什么不能对 enum 做同样的事情。只是一个想法。谢谢
  • 看起来不是一个好的选择,因为这将在代码上创建第二个必须跟踪文本值的位置。
【解决方案2】:

在你的枚举中实现一个 toString(),如下所示

public toString() {
    return description;
}

这将确保您的 json 响应具有描述而不是枚举名称。

【讨论】:

  • 这种方法是最好的选择。但这里的问题是我在 html 选择中使用了相同的枚举。因此,在修改表单时,select 将呈现枚举的描述,而不是 select 选项的 value 属性。因此,解密被提交到服务器而不是枚举。希望你明白这一点。
猜你喜欢
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
相关资源
最近更新 更多