Buenas noches,
He tenido problemitas con el control listshuttle de Richfaces Jboss, el mismo cuando hago el submit me indica que la lista es nula "Component j_id_id19:list has invalid value expression null" , a continuación anexo mi código fuente si alguien puede ayudarme mucho sabría agradecer, lo que necesito es administrar de una forma sencilla las actividades, que se le permitirán a un perfil.
-------------- Este es el jsf que recibe el listshuttle ----------------
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib uri="http://richfaces.org/a4j" prefix="a4j" %>
<%@taglib uri="http://richfaces.org/rich" prefix="rich" %>
<f:view>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Listing DetPerfiles Items</title>
<link rel="stylesheet" type="text/css" href="../jsfcrud2.css" />
</head>
<body>
<h:form rendered="#{not empty Login.tercero.chrUsuario}">
<h:graphicImage url="/imagenes/web/BannerSistGint.jpg" />
<rich:toolBar style="width: 940px; height:24px;" >
<h:commandButton image="/imagenes/web/filesave.png" type="submit" action="#{detPerfiles.aplicarCambios}" alt="Guardar" style="border: 0px;"/>
<rich:toolBarGroup location="right">
<h:panelGrid columns="4">
<h:commandButton image="/imagenes/web/home_2.png" value="Volver al Menú Principal" action="Principal" immediate="true" alt="Regresar al menú principal" style="border: 0px;"/>
<h:commandButton image="/imagenes/web/help.png" action="#{terceros.listSetup}" immediate="true" alt="Ayuda" style="border: 0px;"/>
<h:commandButton image="/imagenes/web/publish_x.png" value="Volver al Menú Principal" onclick="history.back();return false;" immediate="true" alt="Cerrar" style="border: 0px;"/>
<h:commandButton image="/imagenes/web/power.png" action="#{Login.exit}" immediate="true" alt="Salir" style="border: 0px;"/>
</h:panelGrid>
</rich:toolBarGroup>
</rich:toolBar>
<rich:panel style="width: 940px; heigth:400px;text-align:left">
<rich:panelBar style="font-size: 14pt;">Detalle de Actividades</rich:panelBar>
<h:panelGrid>
<rich:listShuttle id="list" sourceValue="#{detPerfiles.actividades}"
targetValue="#{detPerfiles.detPerfilesItemsV}"
converter="#{ve.com.ttgroup.ejb.DetPerfilesConvert er}"
targetCaptionLabel="Permisos Actuales"
var="detPerfil"
sourceCaptionLabel="Permisos Disponibles"
copyControlLabel="Añadir"
copyAllControlLabel="Añadir Todos"
removeControlLabel="Remover"
removeAllControlLabel="Remover Todas"
upControlLabel="Arriba"
downControlLabel="Abajo"
bottomControlLabel="Último"
topControlLabel="Primero">
<rich:column width="18">
<h:graphicImage value="#{detPerfil.actividad.chrIcono}" style="border:0px"/>
</rich:column>
<rich:column>
<h:outputText value="#{detPerfil.actividad.chrDescactividad}"></h:outputText>
</rich:column>
</rich:listShuttle>
</h:panelGrid>
</rich:panel>
</h:form>
<h:form rendered="#{empty Login.tercero.chrUsuario}">
<h:graphicImage url="/imagenes/web/BannerSistGint.jpg" />
<rich:panel style="width: 940px; text-align:left;" >
<f:facet name="header">
<h:outputText value="Error"/>
</f:facet>
<h:panelGrid columns="4">
<h:graphicImage value="/imagenes/web/stop.jpg"/>
<h:outputText value="Usted no se encuentra logueado a la aplicación, Haga clic"/> <h:commandLink value="acá" action="#{Login.exit}"/> <h:outputText value="para loguearse"/>
</h:panelGrid>
</rich:panel>
</h:form>
<h:panelGroup id="messagePanel" layout="block">
<h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
</h:panelGroup>
</body>
</html>
</f:view>
----- Estos son los atributos y métodos que llamo en el bean------------------------
private List<DetPerfiles> detPerfilesItems = new ArrayList<DetPerfiles>();
private List<DetPerfiles> detPerfilesN = new ArrayList<DetPerfiles>();
private List<ActividadesModulo> actividades = null;
public List<DetPerfiles> getDetPerfilesItemsV() {
if (detPerfilesItems.size()==0){
detPerfilesItems = jpaController.findDetPerfilesEntities(intIdperfil, intIdmodulo);
}
return detPerfilesItems;
}
public void setDetPerfilesItemsV(List<DetPerfiles> detPerfilesItems) {
this.detPerfilesItems = detPerfilesItems;
}
public String aplicarCambios(){
for (DetPerfiles x : detPerfilesItems){
System.out.print("Va entrar para guardar los perfiles");
if (x.getIntIddetalleperf()==0){
System.out.print("Detalle del perfil" + x.getIntIddetalleperf());
detPerfiles = (DetPerfiles) x;
try {
jpaController.create(detPerfiles);
JsfUtil.addSuccessMessage("DetPerfiles was successfully created.");
} catch (Exception e) {
JsfUtil.ensureAddErrorMessage(e, "A persistence error occurred.");
}
detPerfiles = null;
}
}
return "perfiles_detail";
}
public List<DetPerfiles> getActividades() {
actividades = jpaController.getActividades(intIdperfil, intIdmodulo);
for (ActividadesModulo x : actividades){
DetPerfiles detp = new DetPerfiles();
detp.setIntIddetalleperf(0);
detp.setIntIdModulo(intIdmodulo);
detp.setIntIdperfil(intIdperfil);
detp.setActividad(x);
detp.setMcaActivo("S");
detp.setMcaPermitido("S");
detp.setMcaBorrado("N");
detPerfilesN.add(detp);
}
return detPerfilesN;
}
Estoy utilizando el mismo converter de la entity DetPerfiles
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ve.com.ttgroup.ejb;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import ve.com.ttgroup.entitybeans.DetPerfiles;
/**
*
* @author Administrador
*/
public class DetPerfilesConverter implements Converter {
public Object getAsObject(FacesContext facesContext, UIComponent component, String string) {
if (string == null || string.length() == 0) {
return null;
}
Integer id = new Integer(string);
DetPerfilesJpaController controller = (DetPerfilesJpaController) facesContext.getApplication().getELResolver().getV alue(facesContext.getELContext(), null, "detPerfilesJpa");
return controller.findDetPerfiles(id);
}
public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
if (object == null) {
return null;
}
if (object instanceof DetPerfiles) {
DetPerfiles o = (DetPerfiles) object;
return o.getIntIddetalleperf() == null ? "" : o.getIntIddetalleperf().toString();
} else {
throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: ve.com.ttgroup.entitybeans.DetPerfiles");
}
}
}
No sé que estoy haciendo mal, es el único control que me ha dado guerra, si necesitan mi faces_config por favor hacermelo saber.
Gracias de antemano.