我已经为我的一些枚举类型创建了bean副本,以便在JSP页面中使用。最初,当我将枚举bean设置为特定值时,我必须通过字符串比较循环遍历所有可能的枚举值,但我刚刚知道你实际上可以设置类型以匹配本机枚举类型,并且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" />
上面的代码适用于该枚举类型(具有整数内部值),但是当我将相同的“修复”应用于另一个具有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方法的type参数更改为枚举类型,因此它与get方法的返回类型冲突。看来对于bean来说,你需要为get输入设置相同的类型并设置返回变量。
像这样:
public void setName(String name)
必须有相应的getter(反之亦然)
public String getName()
答案 0 :(得分:1)
我不知道JSP中Enum的内部解释,但是在Enums开箱即用你有valueOf方法
enum Test{
AAAA
}
Test.valueOf("AAAA")
可以替换您的setName
方法。
至于支持的值,请查看:http://www.it.cas.cz/manual/jsp/syntaxref1216.html#17460
对象目标转换为String,因此不支持此功能,您需要一个接受字符串的方法
...
Short or Short
java.lang.Short.valueOf(String)
Object
new String(string-literal)
答案 1 :(得分:0)
它正在查找带有签名setName(String)
的方法,该方法已被删除。
我怀疑该解决方案是否有效,请尝试清理您的应用程序/ Web服务器的工作区并重新启动。
然后它会一直开始失败。