Java + Javascript

Alguém sabe como posso passar parâmetros de uma classe do java para um javascript?

Tenho um projeto web usando jsf, gostaria de colocar um javascript nesse jsf mas ele iria ter que pegar algumas variáveis do meu bean…

Se alguém puder me ajudar, por favor, agradeço.

[quote=lpalma]Alguém sabe como posso passar parâmetros de uma classe do java para um javascript?

Tenho um projeto web usando jsf, gostaria de colocar um javascript nesse jsf mas ele iria ter que pegar algumas variáveis do meu bean…

Se alguém puder me ajudar, por favor, agradeço.[/quote]

Cara, não me lembro se tem alguma diferença no JSF, mas já tentou isso?

// javascript var valor = ${seu_bean.propriedade}; // ou isso var valor = '${seu_bean.propriedade}';

[quote=marcelo.bellissimo]Cara, não me lembro se tem alguma diferença no JSF, mas já tentou isso?

// javascript var valor = ${seu_bean.propriedade}; // ou isso var valor = '${seu_bean.propriedade}';[/quote]

Opa, valeu pela dica, mas não funcionou…
Sem as aspas simples dá erro na hora de usar e o JS não é gerado. Com as aspas ele considera como uma string e imprime diretamente o texto…

Vou continuar tentando aqui, se eu encontrar uma solução antes de alguém me ajudar eu posto aqui!

Vlw Marcelo!

Da uma olhada no framwork DWR, que de certa forma fazia a ponte entre JAVA e javascript, permitindo chamar metodos JAVA a partir do javascript e utilizar o retorno no javascript.

Opa, to olhando aqui, o DWR parece que vai resolver o meu problema!!

Valeu Jaziel!

Boa tarde lpalma;

o certo seria Hash(#)
Por exemplo:

alert('#{pesquisaAvancada.criterioProduto}');

[quote=Ygor]Boa tarde Ipalma;

o certo seria Hash(#)
Por exemplo:

alert('#{pesquisaAvancada.criterioProduto}');

[/quote]

Opa, é L palma, e não I palma hehe mas isso não vem ao caso.

Então, o certo é o # quando se está no JSF, programando o XHTML. Mas já tentei aqui e o JavaScript não aceita esse símbolo para essa finalidade…

Obrigado mesmo assim pela ajuda Ygor :smiley:

Hehehehe
Desculpe o engano, ja arrumei ali em cima;

As suas funções estão em javascript externo?

Pergunto isso pq quando eu necessito atribuir a uma variavel em javascript o mesmo valor que existe em uma variavel de um bean;

Eu a declaro dentro do código .xhtml e depois acesso através das funções externas. Algumas pessoas desaconselham este tipo de prática, mas ela já me poupou muitas dores de cabeça.

Estão sim… vou colocar aqui para ver se consegue entender.

Eu tenho .js assim:

google.load('visualization', '1', {packages: ['piechart']});

function drawVisualization() {
	var data = new google.visualization.DataTable();
	data.addColumn('string', 'Month');
	data.addColumn('number', 'Sales');
	data.addRows([
	              ['January',{v:20, f:'$20M'}],
	              ['February',{v:31, f:'$31M'}],
	              ['March',{v:61, f:'$61M'}],
	              ['April',{v:26, f:'$26M'}]
	               ]);

	_pieChart = new google.visualization.PieChart(document.getElementById('visualization'));
	google.visualization.events.addListener(_pieChart, 'ready', pieReadyHandler);
	_pieChart.draw(data, {width: 300, height: 300, is3D:true});
}

function pieReadyHandler(e) {
	window.setTimeout("_pieChart.setSelection([{row:0, column:null}])", 2000);
	window.setInterval("togglePieSelection()", 5000);
}

function togglePieSelection() {
	var nextSliceNumber = (_pieChart.getSelection()[0].row + 1) % 4;
	_pieChart.setSelection([{row:nextSliceNumber, column:null}]);
}

google.setOnLoadCallback(drawVisualization);

Esse é o código de javascript de exemplo de criação de um chart, no Google Charts.

Aí, eu chamo ele no meu jsf, que é um template que é incluído na página principal:

<a4j:loadScript src="https://www.google.com/jsapi"/>
<a4j:loadScript id="chart" src="/js/chart.js"/>

E com isso, é só eu criar uma div com a id visualization que o gráfico irá aparecer lá. Agora, ao invés de aparecer ‘January’, ‘February’… eu queria que fossem dados de meu Bean.

Opa, consegui!!

Eu criei um form e coloquei em vários h:inputHidden as informações que eu queria:

<h:form id="grafico01" prependId="false">
   <h:inputHidden value="#{graficoBean.valor01}" id="valor01" />
   <h:inputHidden value="#{graficoBean.valor02}" id="valor02" />
</h:form>

(o prependId é usado pois senão os ids dos inputs serão grafico01:valor01 , grafico01:valor02 )

Então, no JavaScript eu consigo os valores dos Beans usando:

document.getElementById('valor01').value
document.getElementById('valor02').value

Resumindo, o JavaScript consegue o valor do XHTML, o qual consegue o valor do Bean.
JavaScript <= XHTML <= Java

No meu caso essa solução é boa pois além de eu não precisar acrescentar nenhum framework à aplicação, irá diminuir também o reuso de código.

Povo, viajei… o meu javascript tava fora do contexto no jsf, por isso que não tava carregando as informações do Bean…

Dá para usar normal ‘#{nomeBean.variavel}’ dentro do JavaScript, só para esclarecer.