2012-12-10 6 views
1

glassfish-3.1.2에서 응용 프로그램을 개발하려고합니다. ,이상한 javax.el.propertynotfoundexception

@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 */ 

다음과 같은 콩

@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; 
}   
} 

다음과 같은 컨트롤러

@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; 
} 

그래서 :

@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 

및 펌웨어 엔티티 : 나는 다음과 같은 그룹 엔티티를했습니다 내가 다음을 사용할 때 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> 

이 그룹의 목록을 보여주기 위해, 내가 해결하지 않고, 다시, 다시

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

구하십시오. 솔루션을 찾을 수 없습니다. 누구든지 나를 도울 수 있습니까?

답변

0

게터와 세터를 보는 것이 좋습니다. 어둠 속에서 단지 한 발 : Properties에서 Underscores를 사용하는 것은 Java Bean의 방침을 따르지 않습니다. 나는 이것이 또한 당신의 문제의 근원 일 수 있다고 확신합니다. 나는 당신이 당신이 그것을 해결할 수있는 케이스와 함께 바이올린을한다면 확실합니다. groupName 속성의 이름을 바꾸고 setGroupName 및 getGroupName을 사용하고 g.groupName을 식으로 사용하는 것이 좋습니다.

+0

이름을 변경했지만 동일한 결과가 나타납니다. /listGroups.xhtml @ 25,64 value = "$ {g.groupName}": 'entities.Firmware'클래스에는 'groupName'속성이 없습니다. –

+0

아,이 기능을 놓친 이유는 무엇입니까? JSF가 Firmware 클래스 내부를 왜보고 있는지 알 수 없습니다. 나의 첫 번째 제안은 컨트롤러가 잘못 연결되었지만 펌웨어 컨트롤러에 groupsList 속성이 없기 때문에 이것은 가짜입니다. 정확한 JSF 코드를 가지고 있습니까? 올바른 XHTML 파일을 찾고 있는지 확인하고 25 번째 줄, 65 번째 줄을 확인하십시오. – Stefan