Eu criei um sistema que envolve Alunos, matérias e Matrículas
Eu tenho 12 páginas JSP e mais um monte de Servlets, DAO, classes, etc
Depois fiz um esquema de itnernacionalização utilizando tags JSTL
Ele já está pronto, só falta um detalhe muito importante, e é essa a minha dúvida.
Eu configurei um resource bunddle no web.xml para ser o da lingua padrão
Todas as 12 páginas tem links para inglês, português e Espanhol, sendo que cada link redireciona para o servlet que gerou aquela página, colocando como parâmetro o locale desejado, que se torna o locale da session, assim se torna o locale para todas as outras paginas jsp, fiz isso usando a taglib <fmt>
O problema é que existem alguns servlets que executam operações SQL que necessitam da especificação de qual locale fazem parte os dados enviados.
Por exemplo o campo data de nascimento e os campos de notas, eles têm diferentes formatações dependendo do locale.
Para isso eu fiz um esquema com DateFormat para ajeitar isso, e deu certo.
O problema: Eu posso fazer parse dos dados em Português.. ou inglês... mas nunca dinamicamente, ou seja, o servlet não sabe de que lingua vão vir os dados. Ele apenas faz parse de um locale que eu escolher, mas eu quero usar o locale da session!
Eis o código de um dos servlets:
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String birth = request.getParameter("birth");
Boolean[] erro = new Boolean[5];
for (int i = 0; i<5; i++)
{
erro[i] = false;
}
DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, new Locale("pt", "BR"));
SimpleDateFormat DBdf = new SimpleDateFormat("yyyy-MM-dd");
if (name == null || name == "" || birth == null || birth == "")
{
erro[0] = true;
}
if (name == null || name == "")
{
erro[1] = true;
}
if (birth == null || birth == "")
{
erro[2] = true;;
}
else
{
try
{
Date date = df.parse(birth);
birth = DBdf.format(date);
}
catch (Exception e)
{
erro[3] = true;
}
}
if (name.length()>20)
{
erro[4] = true;
}
UserVO user = new UserVO();
user.setName(name);
user.setBirth(birth);
Boolean temErro = false;
for (int i = 0; i<5; i++)
{
if (erro[i]==true)
{
temErro = true;
}
}
if (temErro==true)
{
request.setAttribute("erro", erro);
request.setAttribute("user", user);
getServletConfig().getServletContext().getRequestDispatcher(
"/adicionarusuario.jsp").forward(request,response);
}
if (temErro==false)
{
DAOInterface dao = new HSQLDAO();
int rows = dao.inserirRegistro(user);
request.setAttribute("rowsAdd", rows);
getServletConfig().getServletContext().getRequestDispatcher(
"/UserQueryServlet").forward(request,response);
}
}
Se eu tirar o parâmetro locale do DateFormat ele pega o valor default, mas outro valor default, acho que do Browser ou do Windows ou do java mesmo, que no caso eu não tenho controle sobre.
Agradeço muito a quem me der essa ajuda, espero respostas ;)