这是 Primefaces 错误还是 Mojarra/MyFaces 错误

2024-02-07

当我在里面时,我似乎无法触发事件column of dataTable。这是我的简单演示

<h:form id="form">
    <!--This section of p:tree here seems to be the reason causing the event not fired when click the command button-->
    <p:tree value="#{viewBean.root}" var="node" dynamic="true" cache="false"  
                selectionMode="checkbox"  selection="#{treeBean.selectedNode}">  

        <p:ajax event="expand" update=":form:messages" listener="#{viewBean.onNodeExpand}" />  
        <p:ajax event="collapse" update=":form:messages" listener="#{viewBean.onNodeCollapse}" />  
        <p:ajax event="select" update=":form:messages" listener="#{viewBean.onNodeSelect}" />  
        <p:ajax event="unselect" update=":form:messages" listener="#{viewBean.onNodeUnselect}" />  

        <p:treeNode>  
            <h:outputText value="#{node}" />  
        </p:treeNode>  
    </p:tree>
    <h:panelGroup id="mygroup">
            <p:dataTable id="mytable" value="#{viewBean.foodList}" var="item">
                <p:column>
                    #{item}
                </p:column>
                <p:column>
                    <p:commandButton value="delete" 
                                     action="#{viewBean.delete}"
                                     update=":form:mygroup">
                        <f:setPropertyActionListener target="#{viewBean.selectedFood}"
                                                     value="#{item}"/>
                    </p:commandButton>
                </p:column>
            </p:dataTable>
    </h:panelGroup>
</h:form>

这是我的托管 bean

@ManagedBean
@ViewScoped
public class ViewBean {

    private TreeNode root;  

    private TreeNode selectedNode;  
    private List<String> foodList;

    private String selectedFood;

    @PostConstruct
    public void init(){

        foodList = new ArrayList<String>();
        foodList.add("Pizza");
        foodList.add("Pasta");
        foodList.add("Hamburger");

        root = new DefaultTreeNode("Root", null);  
        TreeNode node0 = new DefaultTreeNode("Node 0", root);  
        TreeNode node1 = new DefaultTreeNode("Node 1", root);  
        TreeNode node2 = new DefaultTreeNode("Node 2", root);  

        TreeNode node00 = new DefaultTreeNode("Node 0.0", node0);  
        TreeNode node01 = new DefaultTreeNode("Node 0.1", node0);  

        TreeNode node10 = new DefaultTreeNode("Node 1.0", node1);  
        TreeNode node11 = new DefaultTreeNode("Node 1.1", node1);  

        TreeNode node000 = new DefaultTreeNode("Node 0.0.0", node00);  
        TreeNode node001 = new DefaultTreeNode("Node 0.0.1", node00);  
        TreeNode node010 = new DefaultTreeNode("Node 0.1.0", node01);  

        TreeNode node100 = new DefaultTreeNode("Node 1.0.0", node10);  
    }

    public void delete(){

        foodList.remove(selectedFood);

    }
    //setter and getter

    public void onNodeExpand(NodeExpandEvent event) {  
       FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Expanded", event.getTreeNode().toString());  

       FacesContext.getCurrentInstance().addMessage(null, message);  
    }  

    public void onNodeCollapse(NodeCollapseEvent event) {  
       FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Collapsed", event.getTreeNode().toString());  

       FacesContext.getCurrentInstance().addMessage(null, message);  
    }  

    public void onNodeSelect(NodeSelectEvent event) {  
       FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected", event.getTreeNode().toString());  

       FacesContext.getCurrentInstance().addMessage(null, message);  
    }  

    public void onNodeUnselect(NodeUnselectEvent event) {  
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Unselected", event.getTreeNode().toString());  

        FacesContext.getCurrentInstance().addMessage(null, message);  
    }  
}

我的问题似乎是该事件没有被触发,这意味着delete永远不会被调用。

我环顾四周,知道 Mojarra 在嵌套 UIData 组件方面存在大量问题,所以我尝试了 Mojarra 2.1.4,仍然没有解决问题。我尝试了Myfaces 2.1.5,仍然不起作用!这是 Primefaces 的 bug 吗?我什至用h:panelGroup作为包装update但它仍然不起作用。

EDIT: 原来如此p:tree上面的dataTable是单击时未触发事件的根本原因commandButton。如果我删除p:tree然后它立即起作用。请注意,p:tree它本身工作得很好,当我点击结帐时,事件在我的托管 bean 上触发。


这是您自己的代码中的错误。

<partial-response>
  <error>
    <error-name>class javax.el.ELException</error-name>
    <error-message><![CDATA[/index.xhtml @15,84 selection="#{viewBean.selectedNode}": Cannot convert [Lorg.primefaces.model.TreeNode;@fd9b4d of type class [Lorg.primefaces.model.TreeNode; to interface org.primefaces.model.TreeNode]]></error-message>
  </error>
</partial-response>

具体的异常消息表明<p:tree selection>预计引用类型的属性TreeNode[]并不是TreeNode(注意[消息中类标识符的前缀,指示数组类型)。因此,相应地修复它:

<p:tree selection="#{treeBean.selectedNodes}">

with

private TreeNode[] selectedNodes;

无论如何,你们都拥有<p:tree> and <p:dataTable>在同一个“神”形态中。因此,其中任何一个组件中的任何操作也会提交另一个组件上的所有内容。如果树和表彼此没有任何关系,那么它们应该分别放置在自己的目录中<h:form>。或者,您必须添加一个process属性到命令链接/按钮以仅处理感兴趣的包含组件,例如process="mytable"在表格内的按钮上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这是 Primefaces 错误还是 Mojarra/MyFaces 错误 的相关文章

随机推荐

  • 使用 JavaScript 从二进制文件读取字节,无需 jQuery

    我正在尝试制作一个 javascript 模拟器 并且我希望它非常轻 所以我不想使用 jQuery 和 jDataView 加载 ROM Si 我用纯 JS 制作了自己的 ROM 加载器 它工作得很好 感谢这个网站上的许多主题 但是 IE
  • 转换 Spring Data JPA 页面内容的类型

    我正在使用 Spring Data JPA 并且我有一个PagingAndSortingRepository
  • 使用rvm、ruby 1.9.2、bundler和passenger的“未初始化常量编码”

    我在这里无计可施 正在向大家寻求有关 f 编码问题的帮助 我在 Dreamhost 上具有 root 权限的私人服务器上运行 这是关于我的环境和版本的一些信息 which ruby v ruby 1 9 2p180 2011 02 18 r
  • JPA中原生查询的字段值

    如何获取本机查询 JPA 中某些字段的值 例如我想获取客户表的姓名和年龄 Query q em createNativeQuery SELECT name age FROM customer WHERE id 注意 我不想将结果映射到实体
  • 我应该在 R 中哪里设置变量 PATH?

    我经常需要在 R 中调用 Tex Live 二进制文件进行编译 但是 在升级 Tex Live 发行版后 需要在 R 中手动更新当前二进制文件的路径PATH Sys getenv PATH 多变的 作为 Ubuntu 系统上的单个用户 我应
  • 字符串是否需要转换字节顺序?

    发送和接收字符串时是否需要转换为网络 主机字节顺序 可用函数 例如 htons 仅适用于 16 位和 32 位整数 我还知道一个事实 单个字符不应该产生影响 因为通常它是一个字节大 但是字符串呢 下面是一个代码片段 int len recv
  • Sql Server——去掉非数字字符

    我有一张桌子 SET ANSI NULLS ON GO SET QUOTED IDENTIFIER ON GO CREATE TABLE dbo TestAB A int IDENTITY 1 1 NOT NULL B nvarchar 1
  • tf 签入特定文件夹

    在 Visual Studio 的 checkin 命令文档中 它说 不使用 签入 对话框签入对单个项目的更改 c code SiteApp Main gt tf checkin program cs noprompt 如何查看特定文件夹
  • 以编程方式显示文本视图选取框

    尝试从数组填充文本视图 我通过下面的代码设法通过 XML 获得了所需的效果
  • 如何检查 Backbone.View 当前是否在 DOM 中呈现?

    我想检查 Backbone View 当前是否在 DOM 中渲染 如果没有 我不必重新渲染它 我可以以某种方式检查一下吗 Regards 好吧 理论上你可以查询 DOM 来找出答案 但这比仅仅设置一个实例变量并在渲染之前查询要慢得多 另一方
  • TabView 的 SwiftUI 动画选项卡

    在 SwiftUI 中使用 TabView 时 是否可以修改选项卡选择之间的转换 目前 当选择不同的选项卡时 转换非常突然 居然瞬间突然 哎哟 例如 给定以下情况 TabView Text The First Tab tabItem Ima
  • LDA和主题模型

    我研究了几个星期的LDA和Topic模型 但是由于我的数学能力很差 我不能完全理解它的内部算法 我使用了GibbsLDA实现 输入大量文档 并将主题数设置为100 我得到一个名为 final theta 的文件 它存储每个文档中每个主题的主
  • CakeEmail 如何在堆栈跟踪之前确定失败?

    我试图捕获电子邮件失败的时间 以便我可以将所需的数据保存在我的数据库中 并且可以尝试稍后发送 我认为以下内容应该像使用时一样工作save if email gt send success works else fail never gets
  • 按日期范围连接表[重复]

    这个问题在这里已经有答案了 我正在寻找按日期范围连接两个表的简单方法 一个表包含确切的日期 另一个表包含两个标识时间段开始和结束的变量 如果第一个表中的日期在第二个表的范围内 我需要连接表 data1 lt data table date
  • npm 警告可选跳过可选依赖项:[电子邮件受保护]

    我正在尝试使用 Angular CLI 安装 Angular 但当我尝试运行此命令时遇到错误 Command npm install g angular cli Error C Users abc gt npm install g angu
  • Makefile 动态变量作为先决条件

    也许这是我搞错了 基本上我的任务是使用make自动构建 部署 启动 停止不同的服务 我想做的事情之一是将变量作为目标先决条件 但是必须在另一个目标中更改该变量 这是我正在尝试做的事情的基本示例 IMAGE COUNT 1 count ima
  • ios7设备底部空间狭小

    我们正在开发一个适用于 ios6 和 ios7 的应用程序 我的问题是 如果我在设备中检查我的应用程序 则会发现一个小的空白区域 其大小等于屏幕底部状态栏的大小 如果我在屏幕顶部放置一个虚拟状态栏 它会在 ios6 中出现问题 如果您有任何
  • 如何将本地创建的函数和变量作为组件中的 props 传递?

    我有一个按钮组件 一个哑组件 我想附加一个可选的动画 并将该动画传递到 props 中 由另一个 prop 的布尔值触发 我在尝试同时通过这两个项目时不断遇到错误 Unknown prop ripple on
  • 确定 Mac 上 Java SDK 的版本

    我有一台运行 Snow Leopard 的 MacBook Pro 如何查看我的 Mac 上安装的 Java SDK 版本 打开终端并输入 java version or javac version 如果您拥有 Snow Leopard 的
  • 这是 Primefaces 错误还是 Mojarra/MyFaces 错误

    当我在里面时 我似乎无法触发事件column of dataTable 这是我的简单演示