jsf - <attribute> 无法解析为 <bean> 的成员

标签 jsf jsf-2 primefaces datatable

我有一颗 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">它给出错误:

无法将行解析为测试成员

原因是什么?

最佳答案

为了完整起见,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 的成员。

解决方案是修改您的类,以便您不再使用静态字段和方法。

@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;
    }

}

关于jsf - <attribute> 无法解析为 <bean> 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19139211/

相关文章:

java - Spring Boot JSF 打包为 JAR

jsf - 为 Primefaces 表创建编辑表单

javascript - 从javascript中的托管bean获取返回值

jsf-2 - Primefaces 扩展 documentViewer 显示下载状态

java - 保留带有primefaces <p :selectManyMenu> while clicking NEXT/BACK of wizard component的选定项目

单击“primefaces”选项卡

java - 需要提交两次表格才能处理吗?

java - 如何在JSF中上传图片

java - JSF 添加 Action 监听器

java - 是否可以通过客户端漏洞查看 HttpSession 属性?