プロダクション(1年以上)で動作するアプリケーション(JSF 2.2、Primefaces 5.1)があります。今、私はそのアプリをPrimefaces 6.0にアップグレードしていますが、水平のツリーのコンテキストメニューに問題が見つかりました。ノード上でマウスの右ボタンを押すと、間違ったcontextMenu(nodeTypeを使用)が表示され、アクションはPF 5.1のように選択されたノードを取得しません。ツリーの向きを垂直に変更すると、期待通りに機能します。 私はテストプロジェクトを作成し、同じ動作に気付きました。 サンプル・ページ:Primefaces 6. nodeTypeのContextMenu水平のツリーで間違った動作をします。
<?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:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<h:outputText id="seleccion" value="Valor seleccionado: #{testController.seleccionado.data}"/>
<p:tree id="arbol" orientation="horizontal" value="#{testController.raiz}" var="nodo" selectionMode="single" selection="#{testController.seleccionado}">
<p:treeNode type="carpeta" expandedIcon="ui-icon-folder-open" collapsedIcon="ui-icon-folder-collapsed">
#{nodo}
</p:treeNode>
<p:treeNode type="hoja">
#{nodo}
</p:treeNode>
</p:tree>
<p:contextMenu for="arbol" nodeType="carpeta">
<p:menuitem value="Ver carpeta" update="seleccion"/>
</p:contextMenu>
<p:contextMenu for="arbol" nodeType="hoja">
<p:menuitem value="Ver hoja" update="seleccion"/>
</p:contextMenu>
</h:form>
</h:body>
</html>
サンプル豆:
package test;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.inject.Named;
import javax.faces.view.ViewScoped;
import org.primefaces.model.TreeNode;
import org.primefaces.model.DefaultTreeNode;
@Named(value = "testController")
@ViewScoped
public class TestController implements Serializable {
private static final long serialVersionUID = 7028608421091861830L;
private TreeNode raiz;
private TreeNode seleccionado;
public TreeNode getRaiz() {
return raiz;
}
public void setRaiz(TreeNode raiz) {
this.raiz = raiz;
}
public TreeNode getSeleccionado() {
return seleccionado;
}
public void setSeleccionado(TreeNode seleccionado) {
this.seleccionado = seleccionado;
}
public TestController() {
}
@PostConstruct
private void crearArbol() {
raiz = new DefaultTreeNode("carpeta", "Origen", null);
TreeNode alfa = new DefaultTreeNode("carpeta", "Alfa", raiz);
TreeNode beta = new DefaultTreeNode("carpeta", "Beta", raiz);
new DefaultTreeNode("hoja", 1, alfa);
new DefaultTreeNode("hoja", 2, alfa);
new DefaultTreeNode("hoja", 3, beta);
new DefaultTreeNode("hoja", 4, beta);
}
}
がwildlfy 8.2.1および10.0.0の両方を使用して、ChromeとFirefoxで同じ動作をテストしました。 誰かが回避策を知っていますか?私は何か間違っている?
ありがとうございます。
contextMenuが作成されている場所を変更しようとしましたが、これはツリーに含めることを意味していますか? –
あなたの提案を試しても、うまくいかない。次の例外を取得します。java.lang.ClassCastException:org.primefaces.component.contextmenu.ContextMenuをorg.primefaces.component.tree.UITreeNodeにキャストできません。 – GCuevasR