我有一个豆子:
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">
行,它会出错:
行无法解析为测试成员
是什么原因?
答案 0 :(得分:3)
为了完整性,the documentation for managed beans声明了以下bean属性
与所有JavaBeans组件一样,属性由私有组成 数据字段和一组访问器方法,如以下代码所示:
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;
}
}