PrimeFaces - 从展示示例运行的 TreeTable 问题

发布于 2024-11-26 17:40:57 字数 5946 浏览 0 评论 0原文

我将 JSF 2.0 与 PrimeFaces 3.0 一起使用,并且可以使 TreeTable 正常工作。发生以下错误:“/index.xhtml @69,62 value =“#{document.name}”:类“Document”没有可读属性“name”。”

代码如下:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Example</title>
    </h:head>

    <h:body>

        <h:form>

            <p:treeTable value="#{documentsController.root}" var="document">

                <p:column>
                    <f:facet name="header">
                        Name
                    </f:facet>
                    <h:outputText value="#{document.name}" />
                </p:column>

                <p:column>
                    <f:facet name="header">
                        Size
                    </f:facet>
                    <h:outputText value="#{document.size}" />
                </p:column>

                <p:column>
                    <f:facet name="header">
                        Type
                    </f:facet>
                    <h:outputText value="#{document.type}" />
                </p:column>

            </p:treeTable>

        </h:form>

    </h:body>
</html>

ManagedBean:

    @ManagedBean
    @SessionScoped
    public class DocumentsController implements Serializable {

    private TreeNode root;

    public DocumentsController() {
        root = new DefaultTreeNode("root", null);

        TreeNode documents = new DefaultTreeNode(new Document("Documents", "-", "Folder"), root);
        TreeNode pictures = new DefaultTreeNode(new Document("Pictures", "-", "Folder"), root);
        TreeNode music = new DefaultTreeNode(new Document("Music", "-", "Folder"), root);

        TreeNode work = new DefaultTreeNode(new Document("Work", "-", "Folder"), documents);
        TreeNode primefaces = new DefaultTreeNode(new Document("PrimeFaces", "-", "Folder"), documents);

        //Documents
        TreeNode expenses = new DefaultTreeNode("document", new Document("Expenses.doc", "30 KB", "Word Document"), work);
        TreeNode resume = new DefaultTreeNode("document", new Document("Resume.doc", "10 KB", "Word Document"), work);
        TreeNode refdoc = new DefaultTreeNode("document", new Document("RefDoc.pages", "40 KB", "Pages Document"), primefaces);

        //Pictures
        TreeNode barca = new DefaultTreeNode("picture", new Document("barcelona.jpg", "30 KB", "JPEG Image"), pictures);
        TreeNode primelogo = new DefaultTreeNode("picture", new Document("logo.jpg", "45 KB", "JPEG Image"), pictures);
        TreeNode optimus = new DefaultTreeNode("picture", new Document("optimusprime.png", "96 KB", "PNG Image"), pictures);

        //Music
        TreeNode turkish = new DefaultTreeNode(new Document("Turkish", "-", "Folder"), music);

        TreeNode cemKaraca = new DefaultTreeNode(new Document("Cem Karaca", "-", "Folder"), turkish);
        TreeNode erkinKoray = new DefaultTreeNode(new Document("Erkin Koray", "-", "Folder"), turkish);
        TreeNode mogollar = new DefaultTreeNode(new Document("Mogollar", "-", "Folder"), turkish);

        TreeNode nemalacak = new DefaultTreeNode("mp3", new Document("Nem Alacak Felek Benim", "1500 KB", "Audio File"), cemKaraca);
        TreeNode resimdeki = new DefaultTreeNode("mp3", new Document("Resimdeki Gozyaslari", "2400 KB", "Audio File"), cemKaraca);

        TreeNode copculer = new DefaultTreeNode("mp3", new Document("Copculer", "2351 KB", "Audio File"), erkinKoray);
        TreeNode oylebirgecer = new DefaultTreeNode("mp3", new Document("Oyle bir Gecer", "1794 KB", "Audio File"), erkinKoray);

        TreeNode toprakana = new DefaultTreeNode("mp3", new Document("Toprak Ana", "1536 KB", "Audio File"), mogollar);
        TreeNode bisiyapmali = new DefaultTreeNode("mp3", new Document("Bisi Yapmali", "2730 KB", "Audio File"), mogollar);

    }

    /**
     * 
     * @return
     */
    public TreeNode getRoot() {
        return root;
    }

}

Bean:

class Document {

    private String name;

    private String size;

    private String type;

    public Document(String name, String size, String type) {
        this.name = name;
        this.size = size;
        this.type = type;
    }

    public Document() {}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSize() {
        return size;
    }

    public void setSize(String size) {
        this.size = size;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }



}

有什么想法吗?与展示的方式完全相同: http://www.primefaces.org/showcase -labs/ui/treeTable.jsf

解决方案如下。唯一的一个变化是,将 bean 从受保护访问更改为公共:

public class Document {

private String name;

private String size;

private String type;

public Document(String name, String size, String type) {
    this.name = name;
    this.size = size;
    this.type = type;
}

public Document() {}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getSize() {
    return size;
}

public void setSize(String size) {
    this.size = size;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}
}

谢谢大家!

I'm using JSF 2.0 with PrimeFaces 3.0 and can get TreeTable working. The following error happens: "/index.xhtml @69,62 value="#{document.name}": The class 'Document' does not have a readable property 'name'."

Here's the code:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Example</title>
    </h:head>

    <h:body>

        <h:form>

            <p:treeTable value="#{documentsController.root}" var="document">

                <p:column>
                    <f:facet name="header">
                        Name
                    </f:facet>
                    <h:outputText value="#{document.name}" />
                </p:column>

                <p:column>
                    <f:facet name="header">
                        Size
                    </f:facet>
                    <h:outputText value="#{document.size}" />
                </p:column>

                <p:column>
                    <f:facet name="header">
                        Type
                    </f:facet>
                    <h:outputText value="#{document.type}" />
                </p:column>

            </p:treeTable>

        </h:form>

    </h:body>
</html>

ManagedBean:

    @ManagedBean
    @SessionScoped
    public class DocumentsController implements Serializable {

    private TreeNode root;

    public DocumentsController() {
        root = new DefaultTreeNode("root", null);

        TreeNode documents = new DefaultTreeNode(new Document("Documents", "-", "Folder"), root);
        TreeNode pictures = new DefaultTreeNode(new Document("Pictures", "-", "Folder"), root);
        TreeNode music = new DefaultTreeNode(new Document("Music", "-", "Folder"), root);

        TreeNode work = new DefaultTreeNode(new Document("Work", "-", "Folder"), documents);
        TreeNode primefaces = new DefaultTreeNode(new Document("PrimeFaces", "-", "Folder"), documents);

        //Documents
        TreeNode expenses = new DefaultTreeNode("document", new Document("Expenses.doc", "30 KB", "Word Document"), work);
        TreeNode resume = new DefaultTreeNode("document", new Document("Resume.doc", "10 KB", "Word Document"), work);
        TreeNode refdoc = new DefaultTreeNode("document", new Document("RefDoc.pages", "40 KB", "Pages Document"), primefaces);

        //Pictures
        TreeNode barca = new DefaultTreeNode("picture", new Document("barcelona.jpg", "30 KB", "JPEG Image"), pictures);
        TreeNode primelogo = new DefaultTreeNode("picture", new Document("logo.jpg", "45 KB", "JPEG Image"), pictures);
        TreeNode optimus = new DefaultTreeNode("picture", new Document("optimusprime.png", "96 KB", "PNG Image"), pictures);

        //Music
        TreeNode turkish = new DefaultTreeNode(new Document("Turkish", "-", "Folder"), music);

        TreeNode cemKaraca = new DefaultTreeNode(new Document("Cem Karaca", "-", "Folder"), turkish);
        TreeNode erkinKoray = new DefaultTreeNode(new Document("Erkin Koray", "-", "Folder"), turkish);
        TreeNode mogollar = new DefaultTreeNode(new Document("Mogollar", "-", "Folder"), turkish);

        TreeNode nemalacak = new DefaultTreeNode("mp3", new Document("Nem Alacak Felek Benim", "1500 KB", "Audio File"), cemKaraca);
        TreeNode resimdeki = new DefaultTreeNode("mp3", new Document("Resimdeki Gozyaslari", "2400 KB", "Audio File"), cemKaraca);

        TreeNode copculer = new DefaultTreeNode("mp3", new Document("Copculer", "2351 KB", "Audio File"), erkinKoray);
        TreeNode oylebirgecer = new DefaultTreeNode("mp3", new Document("Oyle bir Gecer", "1794 KB", "Audio File"), erkinKoray);

        TreeNode toprakana = new DefaultTreeNode("mp3", new Document("Toprak Ana", "1536 KB", "Audio File"), mogollar);
        TreeNode bisiyapmali = new DefaultTreeNode("mp3", new Document("Bisi Yapmali", "2730 KB", "Audio File"), mogollar);

    }

    /**
     * 
     * @return
     */
    public TreeNode getRoot() {
        return root;
    }

}

Bean:

class Document {

    private String name;

    private String size;

    private String type;

    public Document(String name, String size, String type) {
        this.name = name;
        this.size = size;
        this.type = type;
    }

    public Document() {}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSize() {
        return size;
    }

    public void setSize(String size) {
        this.size = size;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }



}

Any ideas? It's exactly the same way as showcase: http://www.primefaces.org/showcase-labs/ui/treeTable.jsf

Solution goes below. The only one change is, change bean from protected access to public:

public class Document {

private String name;

private String size;

private String type;

public Document(String name, String size, String type) {
    this.name = name;
    this.size = size;
    this.type = type;
}

public Document() {}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getSize() {
    return size;
}

public void setSize(String size) {
    this.size = size;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}
}

Thanks guys!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文