2014-02-14 28 views
0

如何通過Ektorp API從CouchDB獲取現有Tourneys的列表?我的代碼如下所示:Ektorp ArrayList獲取PrimeFaces列表組件中的所有JSF

非常感謝。

我在TourneyService類和GETALL()調用梅索德GETALL()是Tourneys

列表

// TourneyService

@Service 
public class TourneyService implements Serializable{ 

private static final long serialVersionUID = 699617628013084160L; 

@Autowired 
private TourneyRepository tourneyRepository; 

public List<Tourney> getAllTourneys(){ 
    return tourneyRepository.getAll(); 
} 
} 

// TourneyRepository

@Component 
public class TourneyRepository extends CouchDbRepositorySupport<Tourney> { 

@Autowired 
public TourneyRepository(@Qualifier("cegocouchdb") CouchDbConnector db) { 
    super(Tourney.class, db); 
    initStandardDesignDocument(); 
} 

@GenerateView @Override 
public List<Tourney> getAll() { 
    ViewQuery q = createQuery("all") 
        .descending(true) 
        .includeDocs(true); 
    return db.queryView(q, Tourney.class); 
} 

    } 

// TourneyListBean

@ManagedBean(name = "TourneyListMmgtBean") 
    @RequestScoped 
    public class TourneyListBean implements Serializable { 

private static final long serialVersionUID = 6130842812974474768L; 

@ManagedProperty(value = "#{tourneyService}") 
private TourneyService tourneyService; 

private List<Tourney> tourneys; 

public void onEdit(RowEditEvent event) { 
    FacesMessage msg = new FacesMessage("Tourney changed", ""); 

    FacesContext.getCurrentInstance().addMessage(null, msg); 
} 

public void onCancel(RowEditEvent event) { 
    FacesMessage msg = new FacesMessage("Aktion abgebrochen", ""); 

    FacesContext.getCurrentInstance().addMessage(null, msg); 
} 


public TourneyService getTourneyService() { 
    return tourneyService; 
} 

public void setTourneyService(TourneyService tourneyService) { 
    this.tourneyService = tourneyService; 
} 

public List<Tourney> getTourneys() { 
    tourneys = tourneyService.getAllTourneys(); 
    if (tourneys == null) { 
     tourneys = new ArrayList<Tourney>(); 
    } 
    return tourneys; 
} 

public void setTourneys(List<Tourney> torneys) { 
    this.tourneys = torneys; 
} 
    } 

JSF

<ui:define name="content"> 



    <h:form id="form"> 

     <p:growl id="messages" showDetail="true" /> 

     <p:dataTable var="tourney" value="#{TourneyListMmgtBean.tourneys}" 
      id="tourneyList" editable="true"> 

      <f:facet name="header"> 
     In-Cell Editing 
    </f:facet> 

      <p:ajax event="rowEdit" listener="#{TourneyListMmgtBean.onEdit}" 
       update=":form:messages" /> 
      <p:ajax event="rowEditCancel" 
       listener="#{TourneyListMmgtBean.onCancel}" update=":form:messages" /> 

      <p:column headerText="Turniername" style="width:30%"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{tourney.name}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{tourney.name}" style="width:100%" 
          label="Turniername" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 

      <p:column headerText="Straße" style="width:20%"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{tourney.street}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{tourney.street}" style="width:100%" 
          label="Straße" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 

      <p:column headerText="Turnierstadt" style="width:24%"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{tourney.city}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{tourney.city}" style="width:100%" 
          label="Turnierstadt" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 

      <p:column headerText="Beginnzeit" style="width:24%"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{tourney.beginTime}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{tourney.beginTime}" style="width:100%" 
          label="Beginnzeit" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 

      <p:column headerText="Endzeit" style="width:24%"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{tourney.endTime}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{tourney.endTime}" style="width:100%" 
          label="Endzeit" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 

      <p:column headerText="Turnierpunkte" style="width:24%"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{tourney.points}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{tourney.points}" style="width:100%" 
          label="Turnierpunkte" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 

      <p:column style="width:6%"> 
       <p:rowEditor /> 
      </p:column> 

     </p:dataTable> 

    </h:form> 

</ui:define> 

錯誤:

org.ektorp.support.ViewGenerationException: Cannot generate 'all' view for null. 

回答

1

@GenerateView具有以下限制:

  • 的方法必須被命名findBy [屬性]。如果定義了@TypeDiscriminator,則也可以生成getAll方法使用的「all」視圖。
  • 該方法可能只有一個參數。
  • 該屬性必須存在於目標類中。

確認您的Tourney類中有@TypeDiscriminator

相關問題