点击treetable行时,Primefaces contextmenu刷新

时间:2012-11-30 12:09:22

标签: primefaces refresh contextmenu treetable

情况如下:我有一个带有3种不同类型对象的treeTable。该表包含p:ajax,其中event =“select”。我写了3个不同的contextMenus,每个类型一个......并且一切运行良好。

我的问题是我想启用/禁用一些menuItems;为此,我使用基于所选节点的属性的条件“呈现”。 一切正常,但只是第二次我右键单击同一个对象(第一次没有过滤contextMenu)。

这是代码......(我只包含一种类型的简单对象)

treeTable页面:

<h:form id="form" prependId="false">
    <p:treeTable value="#{documentsController.root}" var="document" id="docs" 
            selectionMode="single" selection="#{documentsController.selectedNode}">

        <p:ajax event="select" process="@this" update=":form:menus"/>

        <p:column headerText="#{msg['name']}">
            <h:outputText value="#{document.name}" />
        </p:column>
    </p:treeTable>

    <h:panelGroup id="menus">
        <ui:include src="/menu/document_menu.xhtml"/>
    </h:panelGroup>

    <p:dialog id="document-rename-dialog" widgetVar="documentRenameDialog" header="#{msg.rename}">
        <h:panelGrid id="doc-rename" columns="2">
            <h:outputLabel for="name" value="#{msg.name}:" />
            <h:inputText id="name" value="#{documentsController.name}"/>
        </h:panelGrid>

        <div class="spacer-10" />

        <h:panelGroup layout="block">
            <p:commandLink onclick="documentRenameDialog.hide();" value="#{msg.cancel}"/>
            <p:commandLink actionListener="#{documentsController.renameDocument(documentsController.selectedNode.data)}"
            process="@this :form:document-rename-dialog:doc-rename"
            update=":form:docs"
            oncomplete="documentRenameDialog.hide();"
            value="#{msg.check}">
        </h:panelGroup>
    </common:dialog>
</h:form>

document_menu页面:

<p:contextMenu id="contextMenuDocument" for="docs" nodeType="document">
    <p:menuitem value="#{msg.rename}" process="@this docs" update=":form:document-rename-dialog:doc-rename"
        actionListener="#{documentsController.setName(documentsController.selectedNode.data.name)}"
        rendered="#{documentsController.canWrite}"
        icon="ui-icon-pencil" oncomplete="documentRenameDialog.show();"/>
</p:contextMenu>

DocumentsController类:

@ManagedBean
@ViewScoped
public class DocumentsController {
    private TreeNode root;
    private TreeNode selectedNode;
    private String name;

    public TreeNode getSelectedNode() {
        return selectedNode;
    }

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

    public String getName() {
        return name;
    }

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

    public void renameDocument(ArterDocument selectedDocument) {
        if(name != null && !name.equals("")) {
            System.out.println("Document renamed in: "+name);
            ((MyDocument)selectedNode.getData()).setName(name);
        }
        else
            addErrorMessage("Error renaming document.");
    }

    public static boolean canWrite() {
        if(((MyDocument)selectedNode.getData()).isWriteable())
            return true;
        return false;
    }
}

MyDocument类是一个带有String(名称)和布尔值(可写)的简单类。

有人能告诉我如何在第一次拍摄时显示过滤的contextMenu吗?

谢谢!

0 个答案:

没有答案