Struts 2 + Ajax

Ola Pessoal Do forum , estou com um serio problema num projeto que estou desenvolvendo!!!

tenho um formulario em JSP onde após digitar a data e der enter ou TAB quero enviar essa data para minha action , essa minha action atraves desta data fara uma busca no banco pegando uma lista pra mim que vou usar na pagina JSP, entao como faço isso sem dar Submit pois essa lista sera carregada numa tag Select(comboBOX)???

Urgente se alguem puder me ajudar!!!

Aqui tem um exemplo que pode te ajudar.

Flw! :thumbup:

AJudou na parte de monstar o select o problema e saber como envio a data sem dar submit?

quero enviar um campo do formulario sem dar submit

O javascript que contém $.getJSON faz exatamente isso. :roll:

Acho que nao expliquei direito ou nao entendi bem esse tutorial

a seguir segue minha action



@ParentPackage("json-default")

public class PopulaHorariosAction {
 

    private Date data;


    private List<String> horarios;


 
   

 

    @Action(value = "horariosAction", results = @Result(name = "ok", location = "/agendamento.jsp"))

    public String listaHorarios() {
       horarios; = new HorariosDAO().listaHorariosDia(data)

        return "ok";

    }


Meu JSP

<div id="formulario">
			
			<form id="formulario"  method="post" action="agendamentoAction">
				
			<fieldset id="dados">
					
					<legend>Dados Para Agendamento</legend>
					
						
					<span>Data Solicitada:</span><input type="text" name="agendamentos.datasolicitada"/>
					</label>		
						
						<select name="" id="horarios">

            <option>Selecione o horarios</option>

            <c:forEach items="${horarios}" var="horario">

                <option value="${horario}">${horario}</option>

            </c:forEach>

        </select>

							
				</fieldset>
				
				<div class="buttons">
			
			<input type="submit" value="Confirmar" />
			<input type="reset" value="Cancelar" />
		</div>
				
				
			</form>
			
			
		</div>
	

O que eu quero fazer e passar essa data pra minha action sem dar submit e ai clicar no combo pegar a lista de horarios que pesquisei com a data !!!

so q nao sei como fazer isso usando Ajax + Jquery

O tutorial que passei mostra como fazer a requisição assíncrona para o struts usando jquery, e em seguida tratando o retorno. É um exemplo completo sobre o que você perguntou. Se você não entendeu, deve deixar mais claro o que não entendeu.

em qual linha de codigo do JS ele passa um parametro pra action?
em qual linha ele devolve pra pagina JSP?

Amigo, com essas perguntas e com o código que você postou, só posso supor que você nem ao menos leu o post completo. Tudo isso está explicado ponto a ponto no post, como criar a action, como o jquery faz a requisição, e como tratar o retorno.

amigo obrigado por tentar ajudar mas, vou tentar resolver de outras formas!!!
realmente nao entendi citei meu exemplo para que vc tentasse entender a minha duvida , mas nao houve sucesso obrigado!
mas quem sabe outra pessoa com mais paciencia possa me ajudar

Caro Amigo, refiz aqui meu codigo ,porém antes li e reli seu Post e foi de grande valia consegui enfim entender seu POST.

Mas esta acontecendo erros quando recebo a lista , ela faz com que estore a memoria do tom cat …

o json pega todas as referencias da Entity Horarios e acaba estorando a memoria do tom cat

abaixo meu codigo…


@ParentPackage("json-default")
public class PopulaHorariosAction extends ActionSupport{

	private static final long serialVersionUID = 1L;
	private ArrayList<Horarios>lista= new ArrayList<Horarios>();
	private Date data;
	private Horarios horarios ;

	@Action(value="horarioAction",results= @Result(name="ok",type="json",params={
			"excludeProperties","horarios,data"}))
	
	

	
	public String execute(){
		
		lista= new HorarioDAO().lista(data);
	
		
		
		
		
		return "ok";
		
			
	}


	public Date getData() {
		return data;
	}


	public void setData(Date data) {
		this.data = data;
	}


	public ArrayList<Horarios> getLista() {
		return lista;
	}


	public void setLista(ArrayList<Horarios> lista) {
		this.lista = lista;
	}


	public Horarios getHorarios() {
		return horarios;
	}


	public void setHorarios(Horarios horarios) {
		this.horarios = horarios;
	}
	
	
	
}

meu JS

jQuery(function($){
    
    $('#data').blur(function(){        
        
   
        var data = $(this).val();

    	$.getJSON('horarioAction', {'data' : data}, function(json) {
    	        var options = '';

    	        for (var i = 0; i < json.lista.length; i++) {

    	        	options += '<option value=' + parseInt(json.lista[i].horainicio)+'>' + json.lista[i].horainicio +'-'+json.lista[i].horafim+ '</option>';
    	            
}    	        $("#horarios").html(options);

    	
    	
    	});

    });

});

agendamento JSP onde realizo o agendamento

quando o usuario digita a data solicitada eu disparo o evento e o json passa pra minha action a data faço a pesquisa e retorno a lista pro combo

porem ta vindo estorado a memoria…




<div id="formulario">
			
			<form id="formulario"  method="post" action="agendamentoAction">
				
			<fieldset id="dados">
					
					<legend>Dados Para Agendamento</legend>
					
									
					
				
				<label>
					<span>Data Emissão:</span><tagData:campoData id="agendamentos.datapedido"/>
								
					</label>
				
				
				
				
				
				
				
				
				
				<label>
				
				<input type="hidden"" name="agendamentos.usuario.codigo" value="${usuarioLogado.codigo}" />
				<input type="hidden"" name="usuario.tipousuario.codigo" value="${usuarioLogado.tipousuario.codigo}" />										
					</label>
					
					
					
						
				<label>
						
					<span>Data Solicitada:</span> 
					
					<input type="text" name="agendamentos.datasolicitada" id="data">
					
					</label>		

						
						
						<label>
							<span>Horários</span>	<select class="select" name="agendamentos.horarios.codigo" id="horarios">
							<option>Selecione os Horários</option>
						</select>


</label>


					</fieldset>
					
					
					<fieldset id="solicitante">
					<legend> Informações Solicitante</legend>
					
					
					
					<h3>Usuário: ${usuarioLogado.nome}</h3><br>
					
					<h3>Perfil: ${usuarioLogado.tipousuario.tipo}</h3><br>
					
					<br>
					<label>
					<span>Disciplina:</span>
					<select class="select" name="agendamentos.disciplina.codigo">
					
							<option value="1"> Estrutura de Dados </option>					
					</select>
					</label>
					
					</fieldset>
					
					
					<fieldset>
					
					<legend>Motivo Solicitação: </legend>
					
					<textarea name="agendamentos.motivo" rows="12" cols="55">
						
					</textarea>
					
						<label>
					<span>Status:</span><select name="agendamentos.status.codigo" >
							<option value="2" >Aguardando</option>
					</select>
				
					</label>
					

				
				</fieldset>
				
				<div class="buttons">
			
			<input type="submit" value="Confirmar" />
			<input type="reset" value="Cancelar" />
		</div>
				
				
			</form>
			
			
		</div>

abaixo segue a mensagem que da no console do eclipse



Exception in thread "http-bio-8080-exec-10" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Unknown Source)
	at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
	at java.lang.AbstractStringBuilder.append(Unknown Source)
	at java.lang.StringBuilder.append(Unknown Source)
	at java.lang.StringBuilder.append(Unknown Source)
	at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:504)
	at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:327)
	at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:228)
	at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:165)
	at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
	at org.apache.struts2.json.JSONWriter.array(JSONWriter.java:418)
	at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:155)
	at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
	at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:329)
	at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:228)
	at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:165)
	at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
	at org.apache.struts2.json.JSONWriter.array(JSONWriter.java:418)
	at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:155)
	at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
	at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:329)
	at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:228)
	at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:165)
	at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
	at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:329)
	at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:228)
	at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:165)
	at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
	at org.apache.struts2.json.JSONWriter.array(JSONWriter.java:418)
	at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:155)
	at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
	at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:329)


Imagino que seja um problema com a lista de Horarios, creio que ela tenha algum relacionamento circular, onde ao tentar serializar o Horario, ele tenta fazê-lo também com o objeto relacionado, que por sua vez tem a referência para o Horario novamente. Verifique se é o que acontece, já tive um problema parecido trabalhando com jackson.