Artigo Java Magazine 08 - JSTL - Guia Completo

Artigo publicado pela Java Magazine 08.

Esse artigo faz parte da revista Java Magazine edição 08. Clique aqui para ler todos os artigos desta edição

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 lo­calizaçã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 mo­netários – por meio de locales ou patterns específicos.

Embora o suporte a i18n e l10n seja um assunto relativamen­te 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 locali­zaçã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 ge­rencia 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 brow­ser (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”/>

" [...] continue lendo...

Artigos relacionados