这是一个分为两个部分的问题。
我有一个带有char属性的人员对象,称为“活动”。Person有一个getActive()方法,该方法可以按预期返回char。在我的JSTL EL中,我具有以下内容:
<c:if test="${person.active == '1'}">Active</c:if>
这永远不会过去。我的理解是,JSTL中带引号的文字是字符串(无论是单引号还是双引号),并且char类型是从getActive调用中保留的,因此当getActive()返回字符‘1’时,这两个值不相等。
作为替代,我添加了一个isActive()方法,该方法返回一个布尔值。在这种情况下,以下工作:
<c:if test="${person.active == true}">Active</c:if>
这是我的问题:
关于字符比较,我的理解正确吗? 如果是这样,是否有任何方法可以转换JSTL中的类型,使其具有可比性?
从EL 2.2规范的第1.8.2章(强调我的观点):
1.8.2 A {==,!=,eq,ne} B 如果A==B,请申请运营商 如果A是null或者B是null回报false的==或eq,true用于!=或ne。 如果A或者B是BigDecimal,无论是强迫A和B到BigDecimal,然后: 如果operator是==或eq,则返回A.equals(B) 如果operator是!=或ne,则返回!A.equals(B) 如果A或者B是Float或Double要挟都A和B到Double,应用运营商 如果A或者B是BigInteger,无论是强迫A和B到BigInteger,然后: 如果operator是==或eq,则返回A.equals(B) 如果operator是!=或ne,则返回!A.equals(B) * 如果A或者B是Byte,Short,Character,Integer,或Long要挟都A和B到Long,应用运营商 如果A或者B是Boolean要挟两者A并B到Boolean,应用运营商 如果A或者B是一个enum,胁迫都A和B到enum,应用运营商 如果A或者B是String要挟两者A并B到String,比较词汇 否则,如果在调用时发生A.equals(B)错误,则报错 否则,将运算符应用于 A.equals(B)
A {==,!=,eq,ne} B
A==B
A
null
B
false
==
eq
true
!=
ne
BigDecimal
A.equals(B)
!A.equals(B)
Float
Double
BigInteger
Byte
Short
Character
Integer
Long
Boolean
enum
String
的char/ Character是在EL从而强迫和评价Long。那决不能等于字符串文字'1'。
char
'1'
当同时存在getActive()和isActive()时,EL转换会调用哪一个? 似乎isActive()获得了优先权,但是对此有正式记录的命令吗?
从Javabeans规范的第8.3.2章(重点是我的):
8.3.2布尔属性 此外,对于布尔属性,我们允许使用getter方法来匹配模式: public boolean is<PropertyName>(); 可以提供此“ is < PropertyName >”方法来代替“ get < PropertyName >”方法,或者除了“ get < PropertyName >”方法之外,还可以提供该方法。 在任一情况下,如果“是 < 属性名 >”的方法是存在用于一个布尔属性然后,我们将使用“是< 属性名 >”方法来读取的属性值。 布尔属性的示例可能是: public boolean isMarsupial(); public void setMarsupial(boolean m);
此外,对于布尔属性,我们允许使用getter方法来匹配模式:
public boolean is<PropertyName>();
public boolean is<PropertyName>()
可以提供此“ is < PropertyName >”方法来代替“ get < PropertyName >”方法,或者除了“ get < PropertyName >”方法之外,还可以提供该方法。
在任一情况下,如果“是 < 属性名 >”的方法是存在用于一个布尔属性然后,我们将使用“是< 属性名 >”方法来读取的属性值。
布尔属性的示例可能是:
public boolean isMarsupial(); public void setMarsupial(boolean m);
结合前面引用的EL规范第1.8.2章中强调点之后的点,
如果A或者B是Boolean要挟两者A并B到Boolean,应用运营商
将赋予isXxx()方法优先级。
isXxx()