创建一个简单的自定义标签来显示或隐藏正文

时间:2011-08-30 14:56:46

标签: java jsp jsp-tags

我正在尝试创建自己的自定义标记,以便根据属性集显示或隐藏标记之间的内容。

<mytag:isUserInRole role="admin">Show admin specific text</mytag:isUserInRole>`

基本上,如果登录用户有role==admin,我想在标签之间显示文字。 我觉得这很容易,但到目前为止我没有运气。如果我在我的tld文件集<body-content>empty</body-content>中,我得到了这个例外:

“根据TLD,标签auth:isUserInRole必须为空,但不是”

如果我设置<body-content />,我会得到这个:

无法为JSP编译类 - 引起:java.lang.NullPointerException     在org.apache.jasper.compiler.Parser.parseBody(Parser.java:1857)

谁能看到我做错了什么?

她是我的tld-files相关标签:

    <tag>
    <name>isUserInRole</name>
    <tag-class>no.mycompany.tag.AuthorizationTag</tag-class>
    <body-content />
    <attribute>
        <name>role</name>
        <required>true</required>
        <rtexprvalue>false</rtexprvalue>
    </attribute>
</tag>

这是我的AuthorizationTag doStartTag-method:

    public int doStartTag() throws JspException{
    System.out.println("Role"+role);

    //Check that role is given and securitycontext is not null
    if(role==null|| SecurityContextHolder.getContext()==null || SecurityContextHolder.getContext().getAuthentication()==null){
        return Tag.SKIP_BODY;
    }
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();

    if(hasPermission(auth)){
        return Tag.EVAL_BODY_INCLUDE;
    } else {
        return Tag.SKIP_BODY;
    }
}

2 个答案:

答案 0 :(得分:1)

试试这个:<bodycontent>jsp</bodycontent>,同时注意<body-content><bodycontent>

之间的区别

答案 1 :(得分:1)

据我所知,有一个taglib uri="http://www.springframework.org/security/tags"确切地说你正在努力实现它 - 它有<authorize>标签。如果您不想使用它,您可以调查源代码,例如: org.springframework.faces.security.FaceletsAuthorizeTagHandler