Смешивание выражений и языка выражений (<% =%> внутри c: if) - PullRequest
1 голос
/ 13 января 2011

Мне нужно получить доступ к некоторым константам в моем jsp, и, к сожалению, EL не предлагает никакой функциональности для него.Есть несколько вариантов, таких как нестандартная библиотека тегов, но я бы хотел, чтобы она была немного более стандартной.

Я пытался:

<%@ page import = "com.jackdane.Constants"%>
<c:if test="${object.display == '<%=com.jackdane.Constants.YES %>}'">
//some display logic
</c:if>

Но это не похожетрюк.Прошло много времени с тех пор, как я использовал выражение, поэтому я мог сделать ошибку.Любой вклад приветствуется.

Редактировать: Чтобы уточнить, класс констант не в моем контроле.Это внутри фляги, которую я получил.Он содержит нет получателей / установщиков .Просто private static final Strings.

Ответы [ 3 ]

1 голос
/ 13 января 2011
public class Constants
{

    public static final String YES = "yes";

    public String getYES()
    {
        return YES;
    }


}

JSP

<jsp:useBean id="cons" class="com.abc.Constants" scope="session"/>

<c:if test="${object.display == cons.YES}">
0 голосов
/ 13 января 2011

Эта тема о том, как получить доступ к константе, используя EL.Что я спрашиваю, так это то, где я ошибаюсь при использовании выражения внутри EL.

Scriptlets и EL не работают в одном контексте.Несмотря на то, что существуют обходные пути / хаки, все согласны с тем, что вы не должны смешивать их.Используйте один или другой.Поскольку скриптлеты не поощряются с десятилетия, EL - это путь.Я бы предложил вместо этого использовать enum.Даже если вы не можете ссылаться на них напрямую, вы можете просто представить их как строки.

public class Foo {
    public enum Display {
        YES, NO
    }

    private Display display;

    // ...
}

с

<c:if test="${foo.display == 'YES'}">
    ...
</c:if>

См. Также:

0 голосов
/ 13 января 2011

Ответ от Джигара Джоши выглядит хорошо для меня. Если вы не можете изменить класс констант, просто добавьте его в другой класс:

public class ConstantsAccessor {
    public String getYES() {
        return Constants.YES;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...