我已经创建了一些与我的枚举类型对应的 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/