Создание простого пользовательского тега для отображения или скрытия тела - PullRequest
1 голос
/ 30 августа 2011

Я пытаюсь создать свой собственный тег, чтобы я мог отображать или скрывать содержимое между тегами в зависимости от набора атрибутов.

<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-файлам:

    <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>

А вот мой метод авторизации в теге doStartTag:

    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 ]

1 голос
/ 30 августа 2011

Насколько я знаю, есть taglib uri="http://www.springframework.org/security/tags", который именно то, что вы пытаетесь достичь - он имеет тег <authorize>. Если вы не хотите использовать его, вы можете изучить исходный код, например, org.springframework.faces.security.FaceletsAuthorizeTagHandler .

1 голос
/ 30 августа 2011

Попробуйте: <bodycontent>jsp</bodycontent>, также обратите внимание на разницу между <body-content> и <bodycontent>

...