java - JSP Bean通过String设置枚举类型的属性

标签 java jsp enums

我已经创建了一些与我的枚举类型对应的 bean,以便在 JSP 页面中使用。最初,当我将枚举 bean 设置为特定值时,我必须通过字符串比较循环遍历所有可能的枚举值,但我刚刚了解到您实际上可以设置类型以匹配 native 枚举类型,并且 JSP 通过以下方式处理字符串匹配:本身就像下面的代码所示。

原始设置属性:

  public void setName(String name)
  {
    switch(name)
    {
      case "NONE":
        this.causeOfDisconnect = CauseOfDisconnect.NONE;
        break;
      case "EXCLUSIVE_SESSION":
        this.causeOfDisconnect = CauseOfDisconnect.EXCLUSIVE_SESSION;
        break;
      case "SESSION_TIMED_OUT":
        this.causeOfDisconnect = CauseOfDisconnect.SESSION_TIMED_OUT;
        break;
      case "INVALID_CAUSE_OF_DISCONNECT":
        this.causeOfDisconnect = CauseOfDisconnect.INVALID_CAUSE_OF_DISCONNECT;
        break;
    }
  }

新设置属性:

  public void setName(CauseOfDisconnect name)
  {
    this.causeOfDisconnect = name;
  }

枚举类型定义:

public enum CauseOfDisconnect
{
  NONE(0),
  EXCLUSIVE_SESSION(1),
  SESSION_TIMED_OUT(2),
  INVALID_CAUSE_OF_DISCONNECT(3);

  private final int code;

  private CauseOfDisconnect(int code)
  {
    this.code = code;
  }
}

在 JSP 中使用:

<jsp:useBean id="exclusiveSessionDisconnect" class="sessionmanager.CauseOfDisconnectBean" />
<jsp:setProperty name="exclusiveSessionDisconnect" property="name" value="EXCLUSIVE_SESSION" />

上面的代码对于该枚举类型(具有整数内部值)工作正常,但是当我将相同的“修复”应用于另一个具有字符串内部值的枚举类型时,服务器返回此错误:不能找到一种方法来在类型为 'java.lang.String' 的 bean 中写入类型为 'java.lang.String' 的属性 'name'。

此类 Bean 中的错误:

<jsp:useBean id="userIdCookie" class="sessionmanager.CookiesBean" />
<jsp:setProperty name="userIdCookie" property="name" value="USER_ID" />

我搜索过类似的问题,这个人似乎也有同样的问题,但我不明白他的答案。

类似问题:enums are being interpreted as Strings

关于如何实现这项工作有什么想法吗?

<小时/>

更新

经过多次检查代码,我终于弄清楚了导致错误的原因。在我的一些 bean 类中,我只定义了一个 set 方法。这些 bean 类适用于我上面所做的更改(修复)。但对于其他一些人,我还定义了一个返回字符串的 get 方法。由于我将set方法的类型参数更改为enum类型,因此与get方法的返回类型发生冲突。看来对于 Bean,您需要具有相同的类型来获取输入和设置返回变量。

像这样:

public void setName(String name)

必须有相应的 getter(反之亦然)

public String getName()

最佳答案

我不知道 JSP 中 Enum 的内部解释,但在开箱即用的 Enum 中,您有 valueOf 方法

   enum Test{
        AAAA
   }

   Test.valueOf("AAAA")

它可以取代您的setName方法。

至于支持的值,请查看:http://www.it.cas.cz/manual/jsp/syntaxref1216.html#17460

对象目标被转换为字符串,因此不支持此功能,您需要有一个接受字符串的方法

...
Short or Short

java.lang.Short.valueOf(String)

Object

new String(string-literal)

关于java - JSP Bean通过String设置枚举类型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24693299/

相关文章:

java - 将数字格式化为货币并存储为整数

java - 从数据库中检索数据并将新数据写入mysql

java - tomcat下的JSP/Grails应用中静态函数是否隔离?

java - 在枚举 Java 中使用数组

ios - 将对象添加到枚举给我错误

Java AWT : Is Font a lightweight object?

java - Kotlin 属性的私有(private) getter 和公共(public) setter

Java - PHP 的 URLConnection MySQL 的 $_GET 方法

apache - 使用 Apache HTTP 服务器和 Tomcat 从/srv/http 运行 jsp 文件

c++ - 实现同时具有枚举和类行为的东西