gpt4 book ai didi

java - Primefaces:ContextMenu 未出现在 overlayPanel 中

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:07 24 4
gpt4 key购买 nike

我尝试在树中添加上下文菜单以执行自定义操作。这棵树是在覆盖面板内实现的。我观察到 contextMenu 仅出现在随机情况下,例如在选择和取消选择树上的某些元素之后。有什么想法吗?

<p:overlayPanel id="advancedSearchPanel" 
styleClass="ui-advanced-search-overlay"
for="advancedSearch"
hideEffect="fade"
my="right top"
widgetVar="advancedSearchPanelWidgetVar" >
<ui:include src="/search/advancedSearch-form.xhtml"/>
</p:overlayPanel>

高级搜索表单

<p:panelGrid  id="panelAdvanced" styleClass="borderless">
...
<p:row>
<p:column colspan="4">
<p:outputLabel value="#{text['searchForm.classifiers']}" for="treeClassifier" styleClass="paddingLabelGrid"/>

<p:contextMenu id="contextSearch" for="treeClassifier">
<p:menuitem value="Escolha todos" update=":searchForm:treeClassifier" actionListener="#{navBarController.displaySelectedSingle}"/>
</p:contextMenu>

<p:tree id="treeClassifier"
value="#{navBarController.rootClassifier}"
var="node" selectionMode="checkbox"
selection="#{navBarController.selectedClassifiers}"
style="height: 200px;width: 540px; margin-bottom: 0px; overflow: auto"
propagateSelectionDown="false"
propagateSelectionUp="false">

<p:ajax event="select" update=":searchForm:btnSearch"/>
<p:ajax event="unselect" update=":searchForm:btnSearch"/>

<p:treeNode expandedIcon="ui-icon-folder-open" collapsedIcon="ui-icon-folder-collapsed">
<h:outputText value="#{node.description}(#{node.code})"/>
</p:treeNode>
</p:tree>
</p:column>
</p:row>
...

最佳答案

这样试试:

我的 advancedSearch-form.xhtml

<?xml version="1.0" encoding="UTF-8" ?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui">

<h:form id="searchForm">
<p:panelGrid id="panelAdvanced" styleClass="borderless">
<p:row>
<p:column colspan="4">
<p:contextMenu id="contextSearch" for="treeClassifier">
<p:menuitem value="Escolha todos" update="treeClassifier" actionListener="#{treeView.displaySelectedSingle}"/>
</p:contextMenu>
<p:tree id="treeClassifier" value="#{treeView.root}" var="node" selectionMode="checkbox" selection="#{treeView.selectedClassifiers}"
style="height: 200px;width: 540px; margin-bottom: 0px; overflow: auto"
propagateSelectionDown="false"
propagateSelectionUp="false">
<p:ajax event="select" global="false" listener="#{treeView.reset}" />
<p:ajax event="unselect" global="false" listener="#{treeView.reset}" />
<p:ajax event="contextMenu" global="false" listener="#{treeView.onContextMenu}"/>
<p:treeNode expandedIcon="ui-icon-folder-open" collapsedIcon="ui-icon-folder-collapsed">
<h:outputText value="#{node.nodeName}"/>
</p:treeNode>
</p:tree>
</p:column>
</p:row>
</p:panelGrid>
</h:form>
</ui:composition>

还有我的 bean :

@Component(value="treeView")
@Scope(value = "session")
public class TreeView implements Serializable {

private TreeNode[] selectedClassifiers;

public TreeNode[] getSelectedClassifiers() {
return selectedClassifiers;
}

public void setSelectedClassifiers(TreeNode[] selectedClassifiers) {
this.selectedClassifiers = selectedClassifiers;
}

private TreeNode selectedClassifier;

public void reset(){
selectedClassifier = null;
}

public void displaySelectedSingle(){
if(selectedClassifier != null){
List<TreeNode> selected = new ArrayList<TreeNode>();
for(int i=0; i < selectedClassifiers.length; i++){
selected.add(selectedClassifiers[i]);
if(selectedClassifiers[i].equals(selectedClassifier))
selected.addAll(selectionRecursive(selectedClassifier));
}
selectedClassifiers = selected.toArray(new TreeNode[selected.size()]);
}

}

public void onContextMenu(NodeSelectEvent event){
selectedClassifier = event.getTreeNode();
}

public List<TreeNode> selectionRecursive(TreeNode node){

List<TreeNode> selected = node.getChildren();

for(TreeNode child : node.getChildren()){
selected.addAll(selectionRecursive(child));
child.setSelected(true);
}

return selected;
}
}

方法 selectionRecursive(TreeNode node) 需要调试,但在我的例子中一切都很好。

关于java - Primefaces:ContextMenu 未出现在 overlayPanel 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26779735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com