首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将整数值作为参数传递到自定义JSP标记中?

如何将整数值作为参数传递到自定义JSP标记中?
EN

Stack Overflow用户
提问于 2015-12-07 19:55:03
回答 1查看 1.2K关注 0票数 2

我有一个在JSP中使用的自制标记库。我的contains -tag有问题。

这是一个通用的contains- check,它接受一个列表和一个对象,并执行一个简单的检查列表是否包含该对象。然而,当列表包含整数值时,我遇到了问题。

这就是我调用标记的方式:

代码语言:javascript
复制
<custom:contains  object="1" list="${sessionScope.USER.userProfiles}"/>

下面是它调用的java类:

代码语言:javascript
复制
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",没有任何区别...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-07 20:24:51

object="1"不会工作,因为它表示一个String

代码语言:javascript
复制
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指定)。

代码语言:javascript
复制
Long long1 = new Long(1L);
Integer integer1 = new Integer(1);
System.out.println(long1.equals(integer1)); // false

解决问题的一种方法是使用List<Long>而不是List<Integer>,或者让自定义标记比较双手的toString()结果。

代码语言:javascript
复制
String string1 = "1";
Integer integer1 = new Integer(1);
System.out.println(string1.toString().equals(integer1.toString())); // true
代码语言:javascript
复制
Long long1 = new Long(1L);
Integer integer1 = new Integer(1);
System.out.println(long1.toString().equals(integer1.toString())); // true
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34132968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档