1

我正在尝试显示单个选择树视图,您应该在其中选择 Primefaces 3.3.1/JSF 2.0 新项目将进入哪个文件夹。到目前为止,我已经用文件夹和子文件夹填充了树:

在此处输入图像描述

但是,当我尝试选择一个文件夹时:什么也没有发生。我的.xhtml页面如下所示:

<h:form id="createSiteForm">
    <label>Under vilken mapp ska sidan ligga under: </label><br />
    <p:tree id="treeSingle" value="#{siteBean.root}" var="node"  
            selectionMode="single"  
            selection="#{siteBean.selectedNode}" dynamic="true" cache="false">  

        <p:treeNode>  
            <h:outputText value="#{node}" />
        </p:treeNode>  
    </p:tree>
</h:form>

我的managed bean

@ManagedBean(name = "siteBean")
@RequestScoped
public class SiteBean implements Serializable {

    private TreeNode root;
    private TreeNode selectedNode;

    public SiteBean(){
        this.loadTreeNodes();
    }

    @SuppressWarnings("rawtypes")
    public void loadTreeNodes(){
        try {
            WebDB db = new WebDB();

            List<Folder> folders = db.getRootFolders();
            root = new DefaultTreeNode("Root", null); 
            boolean first = true;

            db = null;

            for (Iterator fi = folders.iterator(); fi.hasNext();){
                Folder folder = (Folder) fi.next();

                TreeNode node = new DefaultTreeNode(folder.getName(), root);

                if(first){
                    node.setSelected(true);
                    selectedNode = node;
                    first = false;
                }

                this.findNodeChildren(folder.getId(), node);
            }

        } catch (DatabaseException e) {
            e.printStackTrace();
        }
    }

    @SuppressWarnings("rawtypes")
    private void findNodeChildren(Long id, TreeNode parent){

        try {
            WebDB db = new WebDB();

            List<Folder> fChildren = db.getFolderChildren(id);

            db = null;

            if(fChildren != null && fChildren.size() > 0){

                for (Iterator fi = fChildren.iterator(); fi.hasNext();){
                    Folder folder = (Folder) fi.next();

                    TreeNode node = new DefaultTreeNode(folder.getName(), parent);  

                    this.findNodeChildren(folder.getId(), node);
                }
            }

        } catch (DatabaseException e) {
            e.printStackTrace();
        }
    }

    public TreeNode getRoot() {  
        return root;  
    }  

    public TreeNode getSelectedNode() {  
        return selectedNode;  
    }  

    public void setSelectedNode(TreeNode selectedNode) {  
        this.selectedNode = selectedNode;  
    }
}

我得到了这个奇怪的 jQuery 错误:Uncaught TypeError: Cannot call method 'remove' of nullprimefaces.js?ln=primefaces. 我找不到有关此错误的任何信息:S

4

1 回答 1

1

我得到了这个奇怪的 jQuery 错误:Uncaught TypeError: Cannot call method 'remove' of null in primefaces.js?ln=primefaces。

这些类型的 jQuery 错误通常是由 webapp 加载的重复的不同版本的 jQuery JS 文件引起的。PrimeFaces 作为一个基于 jQuery 的 JSF 组件库,已经自动加载了 jQuery。这个问题表明您出于某种原因手动在 PrimeFaces 之上通过<script>/手动加载另一个 jQuery JS 文件<h:outputScript>。如果删除它们,则此错误应该消失。

如果您碰巧有一个页面想要使用一些 jQuery,但该页面本身不使用任何 PrimeFaces 组件,因此不一定会自动加载 PrimeFaces 捆绑的 jQuery,那么您始终可以自己显式加载它只需添加以下行:

<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />

这将显式加载 PrimeFaces 库捆绑的 jQuery 文件。注意:target="head"当它已经在<h:head>. 否则,例如在模板客户端内部<h:body>或内部时<ui:define>,它将自动重新定位到头部。另一个注意事项:您可以在实际需要 PrimeFaces 捆绑 jQuery 的页面中安全地使用此行。它不会以重复加载而告终。

于 2013-08-06T12:59:21.130 回答