[RESOLVIDO]Struts 2 + jQuery: Problemas para enviar <sj:autocompleter> via formulario

3 respostas
R

Boa tarde pessoal…

Estou tentando fazer com que uma tag sj:autocompleter do plugin jQuery para o Struts 2 seja enviada
via formulario para uma action.

Acontece que o valor dessa tag autocompleter nunca é enviado, e não consigo descobrir o porque.
Tentei substituir essa tag autocompleter por tags textfield, mas ainda assim os seus valores não são enviados
de forma alguma. Como tenho certeza que os valores não são enviados? É porque notei pelo firebug que ao
chamar a action “usuario!listAllBySetor”, nenhum parametro é enviado via GET (junto do endereço da action),
e nenhum parametro é enviado via POST (ao abrir a abinha do firebug para parametros enviados via POST,
o campo está vazio).

Será que alguem tem idéia do que seja?

Seguem os códigos logo abaixo:

detalharDemanda.jsp

<%@taglib prefix="s" uri="/struts-tags"%>
<%@taglib prefix="sj" uri="/struts-jquery-tags"%>
<table style="font-size: 14px;" cellspacing="5">
	<tr>
		<th colspan="4" class="CMHeader">Dados da Demanda</th>
	</tr>
	<tr>
		<th width="200" align="left">Codigo de Demanda:</th><td width="400" colspan="3"><s:property value="demanda.idDemandaView" /></td>
	</tr>
	<tr>
		<th align="left">Eleitor:</th><td colspan="3"><s:property value="demanda.eleitor.nome"/></td>
	</tr>
	<tr>
		<th align="left">Setor Responsável:</th><td colspan="3"><s:property value="demanda.listaOcorrencias[demanda.listaOcorrencias.size-1].responsavel.setor.nome"/></td>
	</tr>
	<tr>
		<th align="left">Usuário Responsável:</th><td colspan="3"><s:property value="demanda.listaOcorrencias[demanda.listaOcorrencias.size-1].responsavel.nome"/></td>
	</tr>
	<tr>
		<th align="left">Origem da Demanda:</th><td colspan="3"><s:property value="demanda.listaOcorrencias[demanda.listaOcorrencias.size-1].local"/>,  
			Setor de <s:property value="demanda.listaOcorrencias[demanda.listaOcorrencias.size-1].responsavel.setor.nome"/>, 
			<s:property value="demanda.listaOcorrencias[demanda.listaOcorrencias.size-1].responsavel.nome"/>
		</td>
	</tr>
	<tr>
		<th align="left">Solicitação:</th><td><s:property value="demanda.solic"/></td>
	</tr>
	<tr>
		<th align="left">Descrição:</th><td><s:property value="demanda.obs"/></td>
	</tr>
	<tr>
		<th align="left">Status:</th><td><s:property value="demanda.status"/></td>
	</tr>
</table>
<sj:accordion id="tramitar" autoHeight="false" collapsible="true" active="false">
	<sj:accordionItem title="Tramitar Demanda">
		<%-- <s:form id="tramiteOcorrencia" action="demanda!detalharDemanda?demanda.idDemanda=%{demanda.idDemanda}"> --%>
			<table>
				<tr>
					<s:form action="usuario!listAllBySetor" id="masq">
						<%-- <sj:autocompleter label="Setor" id="idSetor" name="setor.idSetor" list="listaSetores" listKey="idSetor" listValue="nome" onChangeTopics="submitForm"/> --%>
						<sj:textfield label="Id" name="usuario.idUsuario"/>
						<sj:textfield label="Nome" name="usuario.nome"/>
						<sj:submit targets="divUsuarios" formIds="masq" listenTopics="submitForm"/>
					</s:form>
				</tr>
				<tr>
					<td>Usuario: </td>
					<td style="padding-left: 8px;">
						<sj:div id="divUsuarios" deferredLoading="true" listenTopics="submitForm"></sj:div>
					</td>
				</tr>
				<tr>
					<s:textfield name="acao" size="50" label="Ação"/>
				</tr>
				<tr>
					<s:textarea cols="48" rows="5" name="descricao" label="Descrição"/>
				</tr>
				<tr>
					<s:textfield name="solicitacao" label="Solicitação" size="50"/>
				</tr>
				<tr>
					<sj:submit openDialog="dmdDialog" />
				</tr>
			</table>
		<%-- </s:form> --%>
	</sj:accordionItem>
</sj:accordion>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<include file="struts-default.xml"/>
	
	<package name="default" extends="struts-default,json-default" namespace="/">
		<action name="ocorrencia!*" method="{1}" class="br.com.jm.actions.OcorrenciaAction">
			<result name="listAllGrid">/caixaDeEntrada.jsp</result>
			<result name="nextPage">/caixaDeEntrada.jsp</result>
			<result name="prevPage">/caixaDeEntrada.jsp</result>
			<result name="firstPage">/caixaDeEntrada.jsp</result>
			<result name="lastPage">/caixaDeEntrada.jsp</result>
			<result name="listOne">/detalharDemanda.jsp</result>
			<result name="listAllDialog">/detalharDemanda-ocorrencias.jsp</result>
		</action>
		
		<action name="demanda!*" method="{1}" class="br.com.jm.actions.DemandaAction">
			<result name="detalharDemanda">/detalharDemanda.jsp</result>
		</action>
		
		<action name="mensagem!*" method="{1}" class="br.com.jm.actions.MensagemAction">
			<result name="listAllGrid">/caixaDeMensagens.jsp</result>
			<result name="nextPage">/caixaDeMensagens.jsp</result>
			<result name="prevPage">/caixaDeMensagens.jsp</result>
			<result name="firstPage">/caixaDeMensagens.jsp</result>
			<result name="lastPage">/caixaDeMensagens.jsp</result>
			<result name="listOne">/detalharMsg.jsp</result>
		</action>
	    
		<action name="usuario!*" method="{1}" class="br.com.jm.actions.UsuarioAction">
			<result name="invalid">/errorLogin.jsp</result>
			<result name="valid">/home.jsp</result>
			<result name="listAllBySetor">/detalharDemanda-innerSelect.jsp</result>
		</action>
	</package>
</struts>

UsuarioAction.java

package br.com.jm.actions;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import br.com.jm.beans.Setor;
import br.com.jm.beans.Usuario;
import br.com.jm.dao.UsuarioDAO;

import com.opensymphony.xwork2.ActionSupport;

public class UsuarioAction extends ActionSupport implements SessionAware{

	private static final long serialVersionUID = 5784476221249999011L;
	private UsuarioDAO udao = new UsuarioDAO();
	private Usuario usuario = new Usuario();
	private Setor setor = new Setor();
	private List<Usuario> listaUsuarios = new ArrayList<Usuario>();
	private Map<String, Object> session = new HashMap<String, Object>();
	
	public String login(){
		usuario = udao.validateLogin(usuario);
		if(usuario!=null){
			session.put("nome_usuario", usuario.getNome());
			session.put("usuario", usuario);
			return "valid";
		}else{
			return "invalid";
		}
	}
	
	public String listAllSelect(){
		listaUsuarios = udao.listAll();
		return "listAllSelect";
	}
	
	public String listAllBySetor(){
		listaUsuarios = udao.listBySetor(setor);
		return "listAllBySetor";
	}

	public final Usuario getUsuario() {
		return usuario;
	}

	public final void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public final Map<String, Object> getSession() {
		return session;
	}

	public final void setSession(Map<String, Object> session) {
		this.session = session;
	}

	public final List<Usuario> getListaUsuarios() {
		return listaUsuarios;
	}
	
	public final void setListaUsuarios(List<Usuario> listaUsuarios) {
		this.listaUsuarios = listaUsuarios;
	}

	public final Setor getSetor() {
		return setor;
	}

	public final void setSetor(Setor setor) {
		this.setor = setor;
	}
}

3 Respostas

R

Ninguem tem ideia? Nem mesmo se e possivel o envio desse tipo de tag via formulario?

brunojf

Você não declarou na action um “listaSetores” porem o autocompleter espera essa lista como parâmetro para seu preenchimento.
Na hora que você for carregar essa página onde está o autocompleter você já vai no DAO antes de carregar e já seta a lista com os valores.

Espero ter ajudado

R

brunojf, você estava certo por um dos pontos. Eu tive problemas com essa lista que você mencionou.

Mas o que realmente causou todo o meu problema, foi ter colocado uma

dentro do Accordion.
Não sei o que rola com esse elemento do jQuery do struts 2, mas quando voce cria um formulário,
dentro de uma table que está dentro de um Accordion…ele nao vai enxergar nada do que voce colocar
dentro das tags do , como componente deste formulário. Descobri isso depois de muito tempo,
não sei se é uma deficiência do plugin ou se eu estou deixando de fazer algo pra contornar isso.

Mas para todos os efeitos, o problema foi resolvido!

Obrigado aí bruno!!!

Criado 6 de abril de 2012
Ultima resposta 8 de abr. de 2012
Respostas 3
Participantes 2