2013-10-02 56 views
1

成員,我有一顆豆:<attribute>不能被解析爲的<bean>

package controller.types; 

import java.util.ArrayList; 
import java.util.List; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 

@ManagedBean 
@SessionScoped 
public class Test 
{ 

    static List<MainTableRow> rows; 

    public Test() 
    { 
     rows = new ArrayList<>(); 
    } 

    public static List<MainTableRow> getRows() 
    { 
     return rows; 
    } 

    public static void setRows(List<MainTableRow> rows) 
    { 
     Test.rows = rows; 
    } 

} 

我的XHTML頁面是:

<h:form> 
     <p:fileUpload 
      fileUploadListener="#{fileUploadController.handleFileUpload}" 
      mode="advanced" dragDropSupport="false" update="messages" 
      sizeLimit="10000000" fileLimit="3" allowTypes="/(\.|\/)(xls)$/" style="font-size: 14px"/> 

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

     <p:dataTable id="dataTable" var="mainTableRow" value="#{test.rows}" style="font-size: 14px"> 
      <f:facet name="header"> 
      Main Table 
     </f:facet> 

      <p:column sortBy="" headerText="Index"> 
       <h:outputText value="#{mainTableRow.index}" /> 
      </p:column> 
      <p:column sortBy="" headerText="Query"> 
       <h:outputText value="#{mainTableRow.index}" /> 
      </p:column> 
      <p:column sortBy="" headerText="S1"> 
       <h:outputText value="#{mainTableRow.index}" /> 
      </p:column> 
      <p:column sortBy="" headerText="S2"> 
       <h:outputText value="#{mainTableRow.index}" /> 
      </p:column> 
      <p:column sortBy="" headerText="S3"> 
       <h:outputText value="#{mainTableRow.index}" /> 
      </p:column> 
      <p:column sortBy="" headerText="S9"> 
       <h:outputText value="#{mainTableRow.index}" /> 
      </p:column> 
      <p:column sortBy="" headerText="Uygunluk"> 
       <h:outputText value="#{mainTableRow.index}" /> 
      </p:column> 
      <p:column sortBy="" headerText="Kural"> 
       <h:outputText value="#{mainTableRow.index}" /> 
      </p:column> 
      <p:column sortBy="" headerText="Kaynak"> 
       <h:outputText value="#{mainTableRow.index}" /> 
      </p:column> 
      <p:column sortBy="" headerText="Query Type"> 
       <h:outputText value="#{mainTableRow.index}" /> 
      </p:column> 
      <p:column sortBy="" headerText="User Intent"> 
       <h:outputText value="#{mainTableRow.index}" /> 
      </p:column> 

     </p:dataTable> 

    </h:form> 

在行<p:dataTable id="dataTable" var="mainTableRow" value="#{test.rows}" style="font-size: 14px">提示錯誤:

行不能作爲測試成員解決

是什麼原因?

+2

這些方法是'static'。他們不是這個bean的成員。如果你不能這樣做,讓他們使用實例方法或重新考慮你的設計。 –

+0

謝謝,問題解決了:) – yetAnotherSE

回答

3

爲了完整起見,the documentation for managed beans指出以下爲Bean屬性

As with all JavaBeans components, a property consists of a private data field and a set of accessor methods, as shown by this code:

private Integer userNumber = null; 
... 
public void setUserNumber(Integer user_number) { 
    userNumber = user_number; 
} 
public Integer getUserNumber() { 
    return userNumber; 
} 

在你的情況,你是使用靜態方法作爲訪問器/增變。這是行不通的,因爲這些方法不是對象(bean)的成員,它們是類的成員。該應用程序將無法將其解析爲您的test bean的成員。

解決方法是修改您的課程,以便您不再使用static字段和方法。

@ManagedBean 
@SessionScoped 
public class Test 
{ 

    List<MainTableRow> rows; 

    public Test() 
    { 
     rows = new ArrayList<>(); 
    } 

    public List<MainTableRow> getRows() 
    { 
     return rows; 
    } 

    public void setRows(List<MainTableRow> rows) 
    { 
     this.rows = rows; 
    } 

} 
相關問題