Obtendo Locale da Session

0 respostas
K

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(&quot;name&quot;);
			String birth = request.getParameter(&quot;birth&quot;);
			
			Boolean[] erro = new Boolean[5];
			for (int i = 0; i&lt;5; i++)
			{
				erro[i] = false;
			}
			
			DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, new Locale(&quot;pt&quot;, &quot;BR&quot;));
			SimpleDateFormat DBdf = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);
			
			if (name == null || name == &quot;&quot; || birth == null || birth == &quot;&quot;)
			{
				erro[0] = true;
			}
			if (name == null || name == &quot;&quot;)
			{
				erro[1] = true;
			}
			if (birth == null || birth == &quot;&quot;)
			{
				erro[2] = true;;
			}
			else
			{
				try
				{
					Date date = df.parse(birth);
					birth = DBdf.format(date);
				}
				catch (Exception e)
				{
					erro[3] = true;
				}
			}
			if (name.length()&gt;20)
			{
				erro[4] = true;
			}
			
			UserVO user = new UserVO();
			user.setName(name);
			user.setBirth(birth);
			
			Boolean temErro = false;
			for (int i = 0; i&lt;5; i++)
			{
				if (erro[i]==true)
				{
					temErro = true;
				}
			}
			
			if (temErro==true)
			{
				request.setAttribute(&quot;erro&quot;, erro);
				request.setAttribute(&quot;user&quot;, user);
				getServletConfig().getServletContext().getRequestDispatcher(
				&quot;/adicionarusuario.jsp&quot;).forward(request,response);				
			}
			
			if (temErro==false)
			{
				DAOInterface dao = new HSQLDAO();
				int rows = dao.inserirRegistro(user);
				request.setAttribute(&quot;rowsAdd&quot;, rows);
				getServletConfig().getServletContext().getRequestDispatcher(
				&quot;/UserQueryServlet&quot;).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 ;)

Criado 21 de julho de 2010
Respostas 0
Participantes 1