【问题标题】:struts 2 if : compare enumstruts 2 if:比较枚举
【发布时间】:2011-01-03 20:49:58
【问题描述】:

我有一个带有以下代码的 Struts 2 jsp...

<s:iterator value="categories" id="category" status="iteratorStatus">
<s:if test='#category == "M" '>  snip </s:if>

问题是类别后面的java代码是..

    private static final CategoryEnum[] PRIVATE_VALUES = {A,B,C,M   };
    public static final List<CategoryEnum> VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
    public List<CategoryEnum> getCategories() {
    return CategoryEnum.VALUES;
}

所以 IF 语句不起作用,它永远不会评估为真。 我试过转义字符等,但没有成功。

我更愿意使用 'category' 值回调 Action 类,并让其决定要做什么。例如

<s:if test='renderCategory(#category)>  snip </s:if>

但我不知道如何将#category 传递回操作。

那么任何人都可以帮助我弄清楚如何将值传回或使 Struts IF 标记与枚举一起工作。

我已经读过这个:这在这里没有多大帮助,但我还是会参考一下:

Struts 2: Why won't the 'if' tag evaluate a one char string

谁能帮帮我?

杰夫·波特

【问题讨论】:

    标签: java jsp struts2


    【解决方案1】:

    我好像没有看 CategoryEnum 类(只附加了 .class 而不是 .java)。

    CategoryEnum 类虽然是一个枚举,但值是它们自己的类,因此调用 toString() 可以让我比较每个类中的值。

    <s:iterator value="categories" id="category" status="iteratorStatus">
    <s:if test='#category.toString() == "M" '>  snip </s:if>
    

    【讨论】:

      【解决方案2】:

      从您的示例中我不清楚 PRIVATE_VALUES 数组是什么?看起来 A、B、C 和 M 是 CategoryEnum 的实例。在这种情况下,您将 CaterogyEnum 与 OGNL 表达式中的字符串进行比较,这就是它失败的原因。

      您能否在页面呈现之前使用真正的 Java 1.5 枚举,或者在您的操作上创建一个新的字符串值列表?

      【讨论】:

      • 是的,PRIVATE_VALUES 是 CaterogyEnum 的数组。我会给你一个 +1,让我更仔细地查看 CaterogyEnum 实例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 2012-05-04
      • 2023-03-09
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多