如何在我的自定义 JSP 标记中将整数值作为参数传递?
How can I pass an integer value as a parameter in my custom JSP tag?
我有一个在 JSP 中使用的自制标签库。我的 contains
-标签有问题。
这是一个通用的包含检查,它接受一个列表和一个对象,并在列表包含该对象时执行简单检查。但是,当列表包含整数值时,我 运行 遇到了问题。
我是这样称呼标签的:
<custom:contains object="1" list="${sessionScope.USER.userProfiles}"/>
这是它调用的 java class:
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
。由于标签适用于其他类型的对象(字符串等),这使我得出结论,对象是一个字符串值,因此在整数列表中找不到。我也不能完全将对象转换为整数,因为我的标签不再是通用的。
有没有办法在EL中指定参数为整数值?我需要制作另一个名为 ContainsInteger
的标签吗?或者这个问题还有其他解决方案吗?
更新:
将对象值设置为 ""
而不是 "1"
,没有任何区别...
object="1"
不起作用,因为它代表 String
。
String string1 = "1";
Integer integer1 = new Integer(1);
System.out.println(string1.equals(integer1)); // false
object=""
将不起作用,因为 EL 中基于整数的数字默认为 Long
。有关更多详细信息,请参阅 "Expression Language Specification" (specified by JSR-341 中的 “1.7.1 二元运算符 - A {+,-,*} B”部分。
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
我有一个在 JSP 中使用的自制标签库。我的 contains
-标签有问题。
这是一个通用的包含检查,它接受一个列表和一个对象,并在列表包含该对象时执行简单检查。但是,当列表包含整数值时,我 运行 遇到了问题。
我是这样称呼标签的:
<custom:contains object="1" list="${sessionScope.USER.userProfiles}"/>
这是它调用的 java class:
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
。由于标签适用于其他类型的对象(字符串等),这使我得出结论,对象是一个字符串值,因此在整数列表中找不到。我也不能完全将对象转换为整数,因为我的标签不再是通用的。
有没有办法在EL中指定参数为整数值?我需要制作另一个名为 ContainsInteger
的标签吗?或者这个问题还有其他解决方案吗?
更新:
将对象值设置为 ""
而不是 "1"
,没有任何区别...
object="1"
不起作用,因为它代表 String
。
String string1 = "1";
Integer integer1 = new Integer(1);
System.out.println(string1.equals(integer1)); // false
object=""
将不起作用,因为 EL 中基于整数的数字默认为 Long
。有关更多详细信息,请参阅 "Expression Language Specification" (specified by JSR-341 中的 “1.7.1 二元运算符 - A {+,-,*} B”部分。
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