Struts2 + @ManyToMany + checkboxlist não funciona o request do checkboxlist

0 respostas
klaiddias

PessoALL, estou com problemas e a dias nao estou conseguindo resolver;

Não estou conseguindo fazer a Aciont recuperar os itens do meu “checkboxlist” que foram marcados, tenho um relacionamento @ManyToMany que está funcionando perfeitamente porém não está gravando porque os valores não estão sendo recuperados do form;

Formulário

<s:form namespace="/cadastro" action="usuario!gravar" validate="true" focusElement="email">
       <s:textfield name="email" id="email" key="i18n.email" required="true"/>
       <s:textfield name="senha" id="senha" key="i18n.senha" required="true"/>
       <s:checkboxlist 
            list="%{listPerfils}"
            listKey="id"
            listValue="descricao"
            key="i18n.perfil"
            name="perfils"
       />
       <s:submit name="btn_submit" key="i18n.salvar"/>
	</s:form>

Action

public class UsuarioAction extends UsuarioDTO implements Preparable/*, ModelDriven<UsuarioDTO>*/ {
	
	
	private static final long serialVersionUID = 8856864734519504058L;
	private UsuarioService usuarioService;
	private PerfilService perfilService;


	public UsuarioAction(UsuarioService usuarioService, PerfilService perfilService){
		this.usuarioService = usuarioService;
		this.perfilService = perfilService;
		
	}

	public String execute(){
		return SUCCESS;
	}
	
	@Override
	public void prepare() throws Exception {
		LOG.info("UsuarioAction.prepared");  
	}
	public String gravar(){
		this.usuarioService.gravar(parseModel());
		this.addActionMessage(getText("i18n.gravadoComSucesso"));
		return SUCCESS;
	}
	
	@SkipValidation
	public String excluir(){
		this.usuarioService.remover(parseModel().getId());
		addActionMessage(getText("i18n.excluidoComSucesso"));
		return SUCCESS;
	}	
	
	/**
	 * @return Retorna a lista de usuários
	 */
	public List<UsuarioDTO> getUsuarios() {
		return this.usuarioService.findAll();
	}
	

	/**
	 * @return the perfils
	 */
	public List<PerfilDTO> getListPerfils() {
		return perfilService.findAll();
	}

	private UsuarioDTO parseModel(){
		UsuarioDTO usuario = new UsuarioDTO();
		usuario.setId(this.getId());
		usuario.setEmail(this.getEmail());
		usuario.setSenha(this.getSenha());
		usuario.setPerfils(this.getPerfils());
	return usuario;
	}	
}

Entity

@Entity
@Table(name="tb001_cliente", uniqueConstraints = {
	@UniqueConstraint(columnNames="tb001_email")	
	}
)
@SequenceGenerator(name="sq001_cliente", sequenceName="sq001_cliente", allocationSize=1)
public class UsuarioDTO extends ActionSupport implements Serializable {
	private static final long serialVersionUID = 6157460162534656163L;

	@Id
	@Column(name="tb001_id")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sq001_cliente")
	private Long id;
	
	@Column(name="tb001_email", nullable=false, length=120)
	private String email;
	
	@Column(name="tb001_senha", nullable=false, length=20)
	private String senha;
	

	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinTable(name="tb002_cliente_perfil",
		joinColumns = {@JoinColumn(name="tb001_id")},
		inverseJoinColumns = {@JoinColumn(name="tb003_id")}
	)
	private List<PerfilDTO> perfils; 
	
	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}

	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * @return the senha
	 */
	public String getSenha() {
		return senha;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * @param email the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * @param senha the senha to set
	 */
	public void setSenha(String senha) {
		this.senha = senha;
	}

	/**
	 * @return the perfils
	 */
	public List<PerfilDTO> getPerfils() {
		return perfils;
	}

	/**
	 * @param perfils the perfils to set
	 */
	public void setPerfils(List<PerfilDTO> perfils) {
		this.perfils = perfils;
	}

}

Perfil

@Entity
@Table(name="tb003_perfil")
@SequenceGenerator(name="sq003_perfil", sequenceName="sq003_perfil", allocationSize=1)
public class PerfilDTO extends ActionSupport implements java.io.Serializable {
	private static final long serialVersionUID = -3213592458450026858L;

	@Id
	@Column(name="tb003_id")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sq003_perfil")
	private Long id;
	
	@Column(name="tb003_descricao")
	private String descricao;

	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}
	
	/**
	 * @param id the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * @return the descricao
	 */
	public String getDescricao() {
		return descricao;
	}

	/**
	 * @param descricao the descricao to set
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
}

Link completo para aplicacao para download com libs e source.
https://rapidshare.com/files/[telefone removido]/app_modelo.war

Agradeço a ajuda.

Criado 2 de outubro de 2011
Respostas 0
Participantes 1