Acessar variables ​​Java / Servlet / JSP / JSTL / EL em JavaScript

Eu tenho um formulário no JSP. Eu tenho que preenchê-lo com base no object de solicitação (a partir do servlet). Como eu uso o Java Script para acessar atributos de object de solicitação ou se você pode sugerir alguma outra maneira melhor de preencher dinamicamente o formulário?

Você precisa perceber que o Java / JSP é meramente um produtor de código HTML / CSS / JS. Portanto, tudo o que você precisa fazer é deixar o JSP imprimir a variável Java como se fosse uma variável JavaScript e que a saída do código HTML / JS gerado seja sintaticamente válida.

Contanto que a variável Java esteja disponível no escopo EL por ${foo} , aqui estão vários exemplos de como imprimi-lo:

  
  
 
...

Imagine que a variável Java tenha o valor "bar" , então o JSP gerará este HTML que você pode verificar clicando com o botão direito do mouse em View Source no navegador:

  
  
 
...

Observe que essas únicas cotações são obrigatórias para representar uma variável digitada em JS. Se você usou var foo = ${foo}; em vez disso, imprimiria var foo = bar; , que pode acabar em erros de “barra indefinida” quando você tenta acessá-la mais abaixo no código JS (é possível ver erros JS no console JS do conjunto de ferramentas do desenvolvedor da Web do navegador que você pode abrir pressionando F12 no Chrome / FireFox23 + / IE9 +). Observe também que, se a variável representar um número ou um booleano, que não precisa ser citado, funcionará bem.

Se a variável vier a se originar de uma input controlada pelo usuário, lembre-se de levar em conta os buracos de ataque XSS e o escape JS . Perto da parte inferior da nossa página wiki EL, você pode encontrar um exemplo de como criar uma function EL personalizada que escapa de uma variável Java para uso seguro em JS.

Se a variável for um pouco mais complexa, por exemplo, um bean Java, ou uma lista deles, ou um mapa, será possível usar uma das muitas bibliotecas JSON disponíveis para converter o object Java em uma sequência JSON. Aqui está um exemplo assumindo o Gson.

 String someObjectAsJson = new Gson().toJson(someObject); 

Note que desta forma você não precisa mais imprimi-lo como uma string entre aspas.

  

Veja também:

  • Nossa página wiki JSP – veja o capítulo “JavaScript”.
  • Como fugir do JavaScript no JSP?
  • Chame o Servlet e invoque o código Java do JavaScript junto com os parâmetros
  • Como usar o Servlets e o Ajax?

Se você estiver preenchendo previamente os campos de formulário com base nos parâmetros da solicitação HTTP, por que não fazer isso simplesmente no lado do servidor em seu JSP … em vez de no lado do cliente com JavaScript? No JSP, ficaria vagamente assim:

 "/> 

No lado do cliente, o JavaScript não tem realmente o conceito de “object de solicitação”. Você praticamente tem que analisar manualmente a string de consulta para obter os parâmetros CGI. Eu suspeito que não é o que você está realmente querendo fazer.

Na página JSP:

  

Acesse este valor na página Javascipt usando:

 var list_size = parseInt($('#list_size').val()); 

Eu adicionei a página de javascript no meu projeto externamente.