Artigo Java Magazine 08 - JSTL - Guia Completo
Artigo publicado pela Java Magazine 08.
Clique aqui para ler esse artigo em PDF.
JSTL - Guia Completo
Parte 2: Format, SQL e TLVs
Uma das características da linguagem Java é o seu suporte nativo à internacionalização (ou abreviadamente i18n, do inglês internationalization – “i” + 18 letras + “n”) e localização (l10n – localization). Outra característica conhecida pela maioria é o suporte a banco de dados através da API JDBC.
As bibliotecas Format e SQL da JSTL tornam disponíveis esses recursos no desenvolvimento de JSPs. Nesta segunda parte da série sobre a JSP Standard Tag Library, veremos detalhes sobre todas as tags das duas bibliotecas, e analisaremos os TLVs (Tag Library Validators) oferecidos pela JSTL.
Format: biblioteca para i18n de mensagens e l10n de dados
A biblioteca Format fornece tags para internacionalização de mensagens através de resource bundles, além de localização na formatação de dados – números, datas, horários e valores monetários – por meio de locales ou patterns específicos.
Embora o suporte a i18n e l10n seja um assunto relativamente complexo (extenso o suficiente para vários outros artigos), vale a pena analisarmos brevemente alguns dos conceitos envolvidos:
• Locale – é um objeto representando uma região (geográfica ou política). Pode estar associado a uma linguagem (pt para português, en para inglês, por exemplo) ou país (pt_BR, en_US, en_GB etc.), permitindo também o uso de variantes, tais como para um sistema operacional específico. É representado pela classe java.util.Locale;
• Recursos locale-sensitive – recursos para os quais o resultado das operações é influenciado pelo locale utilizado. Exemplos são as classes java.text.NumberFormat e java.text.DateFormat;
• ResourceBundle – coleção de objetos de um locale específico. Quando a aplicação precisar de um recurso dependente de localização (como uma mensagem de texto), ela busca esse recurso no resource bundle. Assim evitamos definir valores diretamente no código – os valores obtidos serão dependentes do locale utilizado em tempo de execução;
• PropertyResourceBundle – subclasse de ResourceBundle que gerencia os objetos do bundle (nesse caso strings), usando um arquivo de propriedades;
• TimeZone – objeto representando um fuso-horário (classe java.util.TimeZone).
A seguir são apresentados detalhes sobre as tags Format.
<fmt:setLocale> – define o locale padrão de um escopo
O locale é definido no atributo value e o escopo (page, request, session ou application, sendo page o valor default), com o atributo opcional scope. O atributo value pode ser um objeto Locale ou uma string representando o código de um locale, ou seja, seguindo o padrão linguagem ou linguagem_país – neste segundo caso, pode-se passar também uma variante do código, através do atributo variant. Exemplos:
<fmt:setLocale value=”pt”/>
<fmt:setLocale value=”en” scope=”session”/>
<fmt:setLocale
value=”pt_BR” variant=”Linux”
scope=”application”/>
Note que, quando essa tag é usada, as demais tags da biblioteca Format não usarão mais o locale cujo valor foi enviado pelo browser (veja o quadro “Determinando o contexto de localização”).
<fmt:setBundle> – define o resource bundle para um escopo
O nome do bundle é definido no atributo basename e o escopo, no atributo opcional scope. Pode-se também atribuir o resultado a uma variável do tipo javax.servlet.jsp.jstl.fmt.LocalizationContext, definida pelo atributo var – nesse caso, o bundle do escopo não é alterado. O bundle a ser usado é do tipo PropertyResourceBundle, e o arquivo deve estar presente no diretório WEB-INF/classes da aplicação web. O nome do arquivo é definido pelo basename concatenado com o código do locale e o nome do variante, como mostrado no “Exemplo 1” a seguir:
<%-- Exemplo 1: define o bundle para o escopo da página --%>
<fmt:setLocale value=”pt_BR” variant=”Linux” scope=”application”/>
<fmt:setBundle basename=”jstl_jm8” scope=”page”/>
<%-- o arquivo com o bundle será procurado no
diretório WEB-INF/classes, na seguinte ordem:
jm8_pt_BR_Linux.properties,
jm8_pt_BR.properties,
jm8_pt.properties,
jm8.properties
--%>
<%-- Exemplo 2: cria um bundle e
associa-o à variável
bundleGenerico --%>
<fmt:setBundle
basename=”jstl_all” var=”bundleGenerico”
scope=”session”/>
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo