Ver Mensaje Individual
  #3 (permalink)  
Antiguo 27/02/2013, 06:15
Erume
 
Fecha de Ingreso: marzo-2006
Mensajes: 106
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: [JPA 2.0] @ManyToMany

Buenas.

He seguido la traza y parece que no es de propio @ManyToMany el problema.

Uso JSF 2.1 para la vista. El @ManyToMany lo calculo a partir de un <h:selectManyCheckbox />, que calculo de la siguiente forma:

Código:
	<h:selectManyCheckbox
                id="permisos"
                value="#{puestosBean.permisosEntidad}"
		layout="pageDirection">
			<f:selectItems value="#{puestosBean.permisos}" />
	</h:selectManyCheckbox>
En el lado del Backing bean tengo lo siguiente:
Código:

	/**
	 * Lista de permisos
	 * posibles.
	 */
	private List<SelectItem> permisos;

	/**
	 * Permisos de la entidad.
	 */
	private Set<Permiso> permisosEntidad;

	/**
	 * Devuelve la lista de posibles
	 * permisios.
	 * @return Lista de posibles
	 * 		permisos
	 */
	public List<SelectItem> getPermisos() {
		return permisos;
	}

	/**
	 * Inserta la lista
	 * de posibles permisos.
	 * @param permisos Lista de
	 * 		posibles permisos
	 */
	public void setPermisos(
			final List<SelectItem> permisos) {
		this.permisos = permisos;
	}

	/**
	 * Devuelve la lista de
	 * permisos de la entidad.
	 * @return Lista de permisos
	 * 		de la entidad
	 */
	public Set<Permiso> getPermisosEntidad() {
		return permisosEntidad;
	}

	/**
	 * Inserta la lista de
	 * permisos de la entidad.
	 * @param permisosEntidad Lista de permisos
	 * 		de la entidad
	 */
	public void setPermisosEntidad(
			final Set<Permiso> permisosEntidad) {
		this.permisosEntidad = permisosEntidad;
	}

	/**
	 * Carga los combos para los
	 * crud.
	 */
	@PostConstruct
	public void cargarCombos() {
		final List<Permiso> todosPermisos = this.permisosBO.getTodos();
		this.permisos = new ArrayList<SelectItem>();

		if ((todosPermisos != null) && !todosPermisos.isEmpty()) {
			for (final Permiso permiso : todosPermisos) {
				final SelectItem elem = new SelectItem();

				elem.setDescription(permiso.getDescripcion());
				elem.setLabel(permiso.getNombre());
				elem.setValue(permiso);

				this.permisos.add(elem);
			}
		}

		if (this.getEntidad() != null) {
			this.permisosEntidad = this.getEntidad().getPermisos();
		}
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public String guardado() {
		final Puesto entidad = this.getEntidad();
		entidad.setPermisos(this.permisosEntidad);
		if (this.getEntidad().getId() == null) {
			this.puestosBO.guardar(entidad);
		} else {
			this.puestosBO.editar(entidad);
		}

		return Nav.PUESTOS;
	}
Al parecer, aunque el atributo "permisosEntidad" es un Set<Permiso>, la etiqueta <h:selectManyCheckbox /> ¡me mete una lista de Strings!.

Y al pasárselo a la entidad, e intentar guardarlo con JPA, me sale ese error de casting. Por eso me dice que no puede convertirlo a String...

No se si tengo que implementarme un conversor para este tipo de etiquetas.

¡Muchas gracias por el interés jav_000!.

Un saludo.
__________________
"El río más profundo siempre es el más silencioso"