2012-10-24 18 views
2

我對這個問題,這是另一種情況下的DataModel必須實現org.primefaces.model.SelectableDataModel,我有一個延伸的基礎實體模型和基礎機構擁有財產的ID。我已經使用該ID作爲rowKey,它拋出這個錯誤。當我rowKey的值設置爲從模型(不是抽象基)的數據表中的作品的任何財產。javax.faces.FacesException:當選擇啓用

請注意,我的工作JavaEE6。

的車型:

@Entity 
@SequenceGenerator(name = "ID_GENERATOR", sequenceName = "USER_ADDRESS_SEQ") 
public class UserAddress extends BaseEntity { //.. } 

@MappedSuperclass 
public abstract class BaseEntity implements Serializable, IEntity { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(generator = "ID_GENERATOR") 
    @Column(name = "ID") 
    private Long id; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } .. 

的JavaEE6豆:

@Stateless 
@Named 
public class UserAddressBean implements Serializable { 
    private static final long serialVersionUID = -6104153017102665096L; 

    private List<UserAddress> addresses; 
    private UserAddress address; 

    public List<UserAddress> getAddresses() { 
     addresses = new ArrayList<UserAddress>(); 
     UserAddress temp = new UserAddress(); 
     temp.setDescription("test"); 
     addresses.add(temp); 

     temp = new UserAddress(); 
     temp.setDescription("test"); 
     addresses.add(temp); 

     return addresses; 
    } 

    public UserAddress getAddress() { 
     return address; 
    } 

    public void setAddress(UserAddress address) { 
     this.address = address; 
    }.. 

而XHTML頁面:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui" 
    template="/shared/page/_oneColumn.xhtml"> 
    <ui:define name="content"> 
     <h:form id="form"> 
      <p:panel> 
       <f:facet name="header"></f:facet> 
       <p:dataTable id="addresses" var="address" 
        value="#{userAddressBean.addresses}" rowKey="#{address.id}" 
        selection="#{userAddressBean.address}" selectionMode="single"> 
        <p:column headerText="#{msg['field.description']}"> 
         <h:outputText value="#{address.description}" /> 
        </p:column> 
       </p:dataTable> 
       <f:facet name="footer"></f:facet> 
      </p:panel> 
     </h:form> 
    </ui:define> 
</ui:composition> 

任何想法的問題嗎?

感謝,
czetsuya

回答

12

噢,對不起,我是很愚蠢的,問題是id爲null。我忘了我硬編碼的價值觀。因此,對於將來遇到相同問題的人來說,要使用較少的代碼行密鑰,請確保您具有以下數據表屬性集: 1.)rowKey 2.)選擇 3.)選擇模式

還要確保該rowKey屬性不爲null。