我有一个在JSP中使用的自制标记库。我的contains
-tag有问题。
这是一个通用的contains- check,它接受一个列表和一个对象,并执行一个简单的检查列表是否包含该对象。然而,当列表包含整数值时,我遇到了问题。
这就是我调用标记的方式:
<custom:contains object="1" list="${sessionScope.USER.userProfiles}"/>
下面是它调用的java类:
public class ContainsTag extends SimpleTagSupport{
private List<Object> list;
private Object object;
public void setList(List<Object> list) {
this.list = list;
}
public void setObject(Object object) {
this.object = object;
}
@Override
public void doTag() throws JspException, IOException {
boolean result;
try {
if(list == null || object == null){
result = false;
}
else{
result = list.contains(object);
}
getJspContext().getOut().print(result);
} catch (Exception e) {
e.printStackTrace();
// stop page from loading further by throwing SkipPageException
throw new SkipPageException("Exception in checking if " + list
+ " contains " + object);
}
}
}
Printline语句显示,即使对象打印1
,列表打印[1]
,结果也是false
。由于该标记适用于其他类型的对象( String等),因此我得出的结论是object是一个字符串值,因此在整数列表中找不到它。我也不能精确地将对象转换为整数,因为我的标记将不再是泛型的。
有没有办法指定一个参数是EL中的整数值?我是否需要创建另一个名为ContainsInteger
的标记?或者这个问题还有其他的解决方案吗?
更新:
将object值设置为"${1}"
而不是"1"
,没有任何区别...
发布于 2015-12-07 20:24:51
object="1"
不会工作,因为它表示一个String
。
String string1 = "1";
Integer integer1 = new Integer(1);
System.out.println(string1.equals(integer1)); // false
object="${1}"
不会工作,因为EL中基于整数的数字默认为Long
。有关详细信息,请参阅"Expression Language Specification"中的“1.7.1二元运算符-A {+,-,*} B"一节(由JSR-341指定)。
Long long1 = new Long(1L);
Integer integer1 = new Integer(1);
System.out.println(long1.equals(integer1)); // false
解决问题的一种方法是使用List<Long>
而不是List<Integer>
,或者让自定义标记比较双手的toString()
结果。
String string1 = "1";
Integer integer1 = new Integer(1);
System.out.println(string1.toString().equals(integer1.toString())); // true
Long long1 = new Long(1L);
Integer integer1 = new Integer(1);
System.out.println(long1.toString().equals(integer1.toString())); // true
https://stackoverflow.com/questions/34132968
复制相似问题