2012-12-10 2 views
1

J'essaie de développer une application sous glassfish-3.1.2. J'ai l'entité groupes suivants:Strange javax.el.propertynotfoundexception

@Entity 
@NamedQueries({ 
@NamedQuery(name = Groups.FIND_BY_ID, query="SELECT g FROM Groups g WHERE g.id = :id"), 
@NamedQuery(name = Groups.FIND_BY_NAME, query="SELECT g FROM Groups g WHERE g.group_name = :name"), 
@NamedQuery(name = Groups.FIND_ALL, query="SELECT g FROM Groups g ORDER BY g.group_name")}) 

public class Groups implements Serializable { 

    public static final String FIND_ALL = "Groups.findAll"; 
    public static final String FIND_BY_ID = "Groups.findById"; 
    public static final String FIND_BY_NAME = "Groups.findByName"; 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String group_name; 
    private String group_desc; 
    @ManyToMany(mappedBy = "UsersGroups") 
    private List<Users> user; 
    /* Follow setters and getters 

et entité Firmware:

@Entity 
@NamedQueries({ 
@NamedQuery(name = "findById", query="SELECT f FROM Firmware f WHERE f.id = :id"), 
@NamedQuery(name = "findByType", query="SELECT f FROM Firmware f WHERE f.type = "type"), 
@NamedQuery(name = "findAll", query="SELECT f FROM Firmware f ORDER BY f.type")}) 
public class Firmware implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String type; 
    /* Follow getters and setters */ 

et les haricots suivants

@Stateless 
@LocalBean 
public class GroupsEJB { 
@PersistenceContext private EntityManager em; 

public Groups persist(Groups group) { 
    em.persist(group); 
    return group; 
} 

public Groups getById(Long id) { 
    TypedQuery<Groups> query = em.createNamedQuery("findById", Groups.class).setParameter("id", id); 
    return query.getSingleResult(); 
} 

public List<Groups> getAllGroups() { 
    TypedQuery<Groups> query = em.createNamedQuery("findAll", Groups.class); 
    return query.getResultList(); 
} 

public List<Groups> getByName(String name) { 
    TypedQuery<Groups> query = em.createNamedQuery("findByName", Groups.class).setParameter("group_name", name); 
    return query.getResultList(); 
} 
} 


@Stateless 
@LocalBean                   
public class FirmwareEJB { 
@PersistenceContext private EntityManager em; 
/** 
* Creates a new instance of FirmwareEJB 
*/ 
public FirmwareEJB() { 
} 
    public Firmware persist(Firmware firmware) { 
    em.persist(firmware); 
    return firmware; 
} 

public List<Firmware> getAllFirmware() { 
    TypedQuery<Firmware> query = em.createNamedQuery("findAll", Firmware.class); 
    return query.getResultList(); 
} 

public List<Firmware> getByType(String type) { 
    TypedQuery<Firmware> query = em.createNamedQuery("findByType", Firmware.class).setParameter("type", type); 
    return query.getResultList(); 
} 
public Firmware getById(Long id) { 
    TypedQuery<Firmware> query = em.createNamedQuery("findById", Firmware.class).setParameter("id", id); 
    return query.getSingleResult(); 
    //Firmware f = em.find(Firmware.class, id); 
    //return f; 
}   
} 

et les contrôleurs suivants

@ManagedBean 
@RequestScoped 
public class GroupsController { 

@EJB 
private GroupsEJB groupsEJB; 

private Groups group = new Groups(); 
private List<Groups> groupsList = new ArrayList<Groups>(); 


/** 
* Creates a new instance of GroupsController 
*/ 
public GroupsController() { 
} 

public String createGroup() { 
    return "createGroup.xhtml"; 
} 

public String saveGroup() { 

    group = groupsEJB.persist(group); 
    groupsList = groupsEJB.getAllGroups(); 
    return "listGroups.xhtml"; 
} 

public String listGroups() { 
    groupsList = groupsEJB.getAllGroups(); 
    return "listGroups.xhtml"; 
} 

public Groups getGroup() { 
    return group; 
} 

public void setGroup(Groups group) { 
    this.group = group; 
} 

public List<Groups> getGroupsList() { 
    return groupsList; 
} 

public void setGroupsList(List<Groups> groupsList) { 
    this.groupsList = groupsList; 
} 



@ManagedBean 
@RequestScoped 
public class FirmwareController { 

@EJB 
private FirmwareEJB firmwareEJB; 
private Firmware firmware = new Firmware(); 
private List<Firmware> firmwareList = new ArrayList<Firmware>(); 

/** 
* Creates a new instance of FirmwareController 
*/ 
public FirmwareController() { 
} 

public String newFirmware() { 
    return "newFirmware.xhtml"; 
} 

public String saveFirmware() { 
    List type = firmwareEJB.getByType(firmware.getType()); 
    if (!type.isEmpty()) { 
     addMessage("Firmware already exist."); 
     return "newFirmware.xhtml"; 
    } 
    firmware = firmwareEJB.persist(firmware); 
    firmwareList = firmwareEJB.getAllFirmware(); 
    return "listFirmware.xhtml"; 
} 

public String listFirmware() { 
    firmwareList = firmwareEJB.getAllFirmware(); 
    return "listFirmware.xhtml"; 

} 

public String searchFirmware() { 
    return "searchFirmware.xhtml"; 
} 

public String searchFirmwareById() { 
    Long id = firmware.getId(); 
    Firmware f = firmwareEJB.getById(id); 
    addMessage("Firmware: " + f.getType()); 
    return "searchFirmware.xhtml"; 
} 

public List<Firmware> getFirmwareList() { 
    return firmwareList; 
} 

public void setFirmwareList(List<Firmware> firmwareList) { 
    this.firmwareList = firmwareList; 
} 

public Firmware getFirmware() { 
    return firmware; 
} 

public void setFirmware(Firmware firmware) { 
    this.firmware = firmware; 
} 

Ainsi, quand j'utilise ce qui suit jsf:

<ui:composition template="./base.xhtml"> 

     <ui:define name="content"> 
      <h:dataTable value="${groupsController.groupsList}" var="g" > 

       <h:column> 
        <f:facet name="header"> 
         <h:outputText value="Group Name" /> 
        </f:facet> 
        <h:outputText value="${g.group_name}" /> 
       </h:column> 
       <h:column> 
        <f:facet name="header"> 
         <h:outputText value="Group Description" /> 
        </f:facet> 
        <h:outputText value="${g.group_desc}" /> 
       </h:column> 

      </h:dataTable> 
     </ui:define> 

    </ui:composition> 

pour afficher la liste des groupes, j'obtiens

javax.el.PropertyNotFoundException: /listGroups.xhtml @25,65 value="${g.group_name}": The class 'entities.Firmware' does not have the property 'group_name'. 

Je reconstruis, réécrire, sans solution. Je suis incapable de trouver une solution. Quelqu'un peut-il m'aider?

Répondre

0

Voir les getters et setters serait bien. Juste un coup dans l'obscurité: l'utilisation Underscores dans les propriétés n'est pas conforme à la cnovention Java Bean. Je suis sûr que cela pourrait aussi être la source de votre problème. Je suis sûr que si vous tripotez le boîtier, vous pourrez vous en sortir. Je suggère fortement cependant que vous renommez la propriété à groupName et avez setGroupName et getGroupName, et utilisez g.groupName comme expression.

+0

J'ai changé les noms mais j'ai le même résultat: /listGroups.xhtml @ 25,64 value = "$ {g.groupName}": La classe 'entities.Firmware' n'a pas la propriété 'groupName'. –

+0

Oh j'ai raté ça, je ne sais pas pourquoi le JSF regarde dans la classe Firmware. Ma première suggestion était, que votre contrôleur est mal lié, mais c'est faux, car le contrôleur de firmware n'a pas de propriété groupsList. Êtes-vous sûr d'avoir le bon code JSF? Vérifiez que vous regardez dans le bon fichier XHTML et voyez à quoi pointe la ligne 25, colonne 65. – Stefan

Questions connexes