Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > jsp файл тэгов


Автор: Pawl 24.12.2012, 10:47
Уважаемые форумчане,
Буквально вчера вечером узнал, что есть возможность создавать собственные тэги при помощи jstl.  smile 
Попытался сделать такой тэг для локализации web-приложения, но неудачно, и теперь прошу Вас помочь в моей проблеме. Код кастом-тэга:
Код

<%@ tag language="java" pageEncoding="UTF-8" %>
<%@ tag body-content="empty" %>
<%@ attribute name="key" required="false" type="java.lang.String" %>
<%@ tag import="guest.localization.Messages" %>
<%@ taglib prefix="core" uri="http://java.sun.com/jsp/jstl/core"%>

<core:if test="${key == null}">
    <core:set var="key" value="" />
    <core:if test="${param.cmd == 'add'}">
        <core:set var="key" value="form.reg" />
    </core:if>
    <core:if test="${param.cmd == 'del'}">
        <core:set var="key" value="form.del" />
    </core:if>
    <core:if test="${param.cmd == 'find'}">
        <core:set var="key" value="form.search" />
    </core:if>
</core:if>    
<core:set var="lang" value="${pageContext.request.locale.language}" />
<core:set var="msg" value="${Messages.getMessage(lang, key)}" />
<core:out value="${msg}" />

здесь класс guest.localization.Messages имеет статический метод getMessage(String, String), который, в зависимости от локали в запросе, загружает нужное сообщение из соответствующего проперти-файла. Код этого класса:
Код

package guest.localization;

import java.util.ResourceBundle;
import static java.util.ResourceBundle.getBundle;

public class Messages {
    public static String getMessage(String lang, String key) {
        String path = "guest/localization/messages/";
        ResourceBundle bundle = ("ru".equals(lang)) ? getBundle(path + "ru") :
                getBundle(path + "en");
        return bundle.getString(key);
    }    
}

Когда я подключаю кастом-тэг в jsp-страницу с формой
Код

<%@ taglib prefix = "msg" tagdir="/WEB-INF/tags" %>

выводится просто пустая форма без всяких сообщений. Если я использую для той же цели кастом-тэг на основе tld и классов, все работает. Я подозреваю, что неправильно реализовал вызов метода getMessage, но пока не разобрался, как это должно быть сделано.
Спасибо заранее за помощь!

Автор: Pawl 25.12.2012, 12:47
Я смотрю, моя тема вызвала очень сильный резонанс! smile  Чтобы прекратить столь бурное обсуждение, скажу, что решил проблему http://stackoverflow.com/questions/6395621/how-to-call-a-static-method-in-jsp-el. А если серьезно, решение оказалось довольно простым, и первое же осмысленное обращение к гуглу дало положительный результат.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)