доступ к константам в JSP (без scriptlet) [дубликат]

Оптимальной идеей из мира Python являются языки атрибутов шаблона ; TAL был введен Zope (поэтому a.k.a. «Zope Page Templates», ZPT) и является стандартом, с реализациями в PHP, XSLT и Java (я использовал воплощения Python / Zope и PHP). В этом классе языков шаблонов один выше пример может выглядеть так:

Example product A nice description 1.23

Код выглядит как обычный HTML (или XHTML) плюс некоторые специальные атрибуты в пространстве имен XML; его можно просматривать в браузере и безопасно настраивать дизайнером. Существует поддержка макросов и для i18n:

Our special offers

Example product A nice description 1.23

Если переводы содержимого доступны, они используются.

Я не очень-то знаю о реализация Java .

26
задан Dónal 24 September 2008 в 12:22
поделиться

2 ответа

Это не работает в Вашем примере, потому что ATTR_CURRENT_USER постоянный не видимо к тегам JSTL, которые ожидают, что свойства будут представлены функциями метода get. Я не попробовал его, но самый чистый способ представить Ваши константы, кажется, нестандартная библиотека тегов .

ЭТА: Старая ссылка, которую я дал, не работала. Новые ссылки могут быть найдены в этом ответе: константы Java во фрагментах кода JSP

для разъяснения поведения Вы видите: Демонстрационный класс:

package com.example;

public class Constants
{
    // attribute, visible to the scriptlet
    public static final String ATTR_CURRENT_USER = "current.user";

    // getter function;
    // name modified to make it clear, later on, 
    // that I am calling this function
    // and not accessing the constant
    public String getATTR_CURRENT_USER_FUNC()
    {
        return ATTR_CURRENT_USER;
    }


}    

Отрывок страницы JSP, показывая демонстрационное использование:

<%-- Set up the current user --%>
<%
    session.setAttribute("current.user", "Me");
%>

<%-- scriptlets --%>
<%@ page import="com.example.Constants" %>
<h1>Using scriptlets</h1>
<h3>Constants.ATTR_CURRENT_USER</h3>
<%=Constants.ATTR_CURRENT_USER%> <br />
<h3>Session[Constants.ATTR_CURRENT_USER]</h3>
<%=session.getAttribute(Constants.ATTR_CURRENT_USER)%>

<%-- JSTL --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean id="cons" class="com.example.Constants" scope="session"/>

<h1>Using JSTL</h1>
<h3>Constants.getATTR_CURRENT_USER_FUNC()</h3>
<c:out value="${cons.ATTR_CURRENT_USER_FUNC}"/>
<h3>Session[Constants.getATTR_CURRENT_USER_FUNC()]</h3>
<c:out value="${sessionScope[cons.ATTR_CURRENT_USER_FUNC]}"/>
<h3>Constants.ATTR_CURRENT_USER</h3>
<c:out value="${sessionScope[Constants.ATTR_CURRENT_USER]}"/>
<%--
Commented out, because otherwise will error:
The class 'com.example.Constants' does not have the property 'ATTR_CURRENT_USER'.

<h3>cons.ATTR_CURRENT_USER</h3>
<c:out value="${sessionScope[cons.ATTR_CURRENT_USER]}"/>
--%>
<hr />

Это производит:

Используя константы scriptlets

. Сессия ATTR_CURRENT_USER

current.user

[Константы. ATTR_CURRENT_USER]

Я

<час>

Используя константы getATTR_CURRENT_USER_FUNC JSTL

()

сессия current.user

[Константы getATTR_CURRENT_USER_FUNC ()]

Меня

Константы. <Час> ATTR_CURRENT_USER


12
ответ дан Community 19 July 2019 в 15:20
поделиться

Во-первых, Ваш синтаксис имел дополнительное"]", который вызывал ошибку.

, Чтобы зафиксировать это и установить переменную Вы сделали бы это:

<c:set var="nullUser" 
    scope="session" 
    value="${sessionScope[Constants.ATTR_CURRENT_USER] eq null}" />

<c:if test="${nullUser}">
     <h2>First Test</h2>
</c:if>
<c:if test="${nullUser}">
     <h2>Another Test</h2>
</c:if>
-2
ответ дан Matt N 19 July 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: