2013-10-02 24 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; 
    } 

} 
相关问题