Primefaces tabview tabChange 事件在显示选项卡后触发

2023-12-07

我正在使用 Primefaces 3.5 和 JSF2.1 (Mojarra) 开发一个项目

我创建了一个primefaces<p:tabView id="tabsVw" dynamic="false">里面有两个选项卡,每个选项卡都有一个 primefaces 数据表

 <h:form> 
        <p:tabView  dynamic="false">
        <p:ajax event="tabChange" listener="#{tstTab.onDtlTabChanged}" />

            <p:tab title="tab1">
                <p:dataTable value="#{tstTab.list1}" var="v1">
                    <p:column>
                        <h:outputText value="#{v1}"/>
                    </p:column>
                </p:dataTable>
            </p:tab>

            <p:tab title="tab2">
                <p:dataTable value="#{tstTab.list2}" var="v2">
                    <p:column>
                        <h:outputText value="#{v2}"/>
                    </p:column>
                </p:dataTable>          
            </p:tab>
        </p:tabView>
    </h:form>

和 bean 内部(视图范围)

@ManagedBean
@ViewScoped
public class TstTab {

    private List<String> list1;
    private List<String> list2;

    public TstTab(){
        list1 = new ArrayList<String>();
        list2 = new ArrayList<String>();


        list1.add("List 1 - Str 1");
        list1.add("List 1 - Str 2");
        list1.add("List 1 - Str 3");
        list1.add("List 1 - Str 4");
        list1.add("List 1 - Str 5");

        list2.add("List 2 - Str 1");
        list2.add("List 2 - Str 2");
        list2.add("List 2 - Str 3");
        list2.add("List 2 - Str 4");
        list2.add("List 2 - Str 5");            
    }


    public void onDtlTabChanged(TabChangeEvent event) {
        System.out.println("000000000000000000");
    }


    public List<String> getList1() {
        System.out.println("11111111111111");
        return list1;
    }


    public List<String> getList2() {
        System.out.println("222222222222222222");
        return list2;
    }

}

现在的问题是运行应用程序并尝试在选项卡之间导航(更改)时,但我可以看到onDtlTabChanged在调用 getter 之后调用,所以这是一个大问题。

如果改变tabView从静态到动态,则行为是随机的,换句话说,对更改事件的调用发生在 getter 中间的某个位置。

先感谢您。


嗯,我认为这是一个 primefaces BUG,我找到了一个解决方法,如下所示

  1. 不要使用全局表单(tabView 本身的表单),而是为每个选项卡使用一个表单(在其中围绕数据表)

  2. 您必须添加一个虚拟选项卡作为第一个选项卡,该选项卡必须包含一个表单,其中包含一些静态数据或预加载的数据

就这样,

问题是ajax请求位于全局表单内,它导致数据表在ajax请求之前首先获取数据, Primefaces 的奇怪之处在于,如果您不添加第一个虚拟选项卡,它将始终执行选项卡内的第一个表单并获取其数据,这将导致问题

问候 ,

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

Primefaces tabview tabChange 事件在显示选项卡后触发 的相关文章

随机推荐

  • Slick2D 字体不起作用

    我有 Slick2D 库并用 Java 制作游戏 我一直想知道 只是一个简短的问题 如何在 Graphics 对象上设置字体以使用不同的字体进行绘制 我无法让它发挥作用 我认为它与 AngelCode 有关 但需要某种不是 tff 的格式
  • 这个程序中的 fread 有什么问题吗?

    我是 C 语言的中级学生 我正在尝试制作一个银行管理程序 但首先我需要制作一个登录程序 所以我创建了以下程序之一 由于我最近了解了C中的文件I O 并且对fread和fwrite不太了解 我有一个文件 data txt 其格式如下 用户1
  • 如何使用新的 2017 ifort 编译此 Fortran 代码?

    我有以下使用 2017 年之前的 ifort 编译的 Fortran 代码 program parallel m contains character 500 function PARALLEL message i ss character
  • Jackson:如何在不修改 POJO 的情况下将现有属性编辑为 JSON?

    我需要编辑 POJO 中 现有字段 的名称 而不是添加 extra field 是否可以使用下面参考的链接方法 请注意我不想使用 JsonProperty注解 要求是 我有一个 POJO 并且希望每次都使用不同的字段名称 而不需要更改 PO
  • 无法在 Heroku 中查看 Express/React 应用程序(同时未找到)

    我在 Heroku 中查看我的 Node Express React 项目时遇到问题 成功将我的项目推送到 Heroku 后 当我尝试在 Heroku 中查看我的应用程序时 出现 404 错误页面 Heroku 日志显示concurrent
  • 如何使用 CasperJS 移动 jquery-ui 滑块

    有什么办法可以移动jQuery UI 滑块 with CasperJS 我也发现了这个github问题在寻找一种可能性时 只需单击滑块的左侧或右侧即可移动handle 但这对我来说也不起作用 任何想法 移动滑块的工作原理如下 casper
  • 在 Firefox 中检查元素标尺

    我想知道是否有任何方法可以在 Firefox 中查看标尺 就像 Chrome 检查元素标尺一样 Chrome 显示您当前的宽度 即 宽度 填充 标尺悬停时的当前宽度 see below Chrome screenshot for ref 它
  • Android 未知命令“紧缩”

    我刚刚在 Mac OS X 中安装了 Eclipse 和 Android SDK 我将项目导入到 Eclipse 但在运行项目时出现未知命令 crunch 错误 我应该如何解决这个问题 请帮我 我刚刚更新 Android SDK Platf
  • 如何让图表填满整个窗口

    我正在使用 QtDesigner 创建的应用程序中绘制图形 问题是 当显示图形时 图形空间和 mplwidget 空间之间会出现一个大的 灰色边缘 这使得绘图变小 那么我如何删除在主窗口中显示图形时出现的这个大 灰色边框 I would l
  • Amazon SES 使用 java 从 S3ObjectInputStream 对象读取存储在 s3 存储桶中的电子邮件

    我已经配置了我的AWS SES将所有传入电子邮件存储到对象键前缀为电子邮件的 S3 存储桶 我有一个 Java 应用程序 我正在尝试读取该存储桶中的所有对象 然后将它们移动到另一个存储桶中 以便只有未读的电子邮件保留在存储桶中 我使用以下代
  • 如何下载wordpress源码?

    我用他们的模板创建了一个 WordPress 网站 为了在另一个托管平台上托管我的 WordPress 网站 我需要我的 wordpress com 网站的源代码 包含所有 php 文件 有没有简单的方法可以做到这一点 这是我第一次使用 w
  • Windows Server 2019 Docker docker.exe:守护程序的错误响应:无法启动服务实用程序 VM(createreadwrite):

    我在 VMWare 中创建了 Windows Server 2019 VM 我尝试在那里运行 docker 容器 Ubuntu 但出现此错误 docker exe 来自守护程序的错误响应 无法启动服务 实用虚拟机 创建读写 我已经做了什么
  • 如何在 UIImage 上快速绘制/涂鸦线?

    我需要在 UIImage 中绘制 涂鸦一条线 如上图所示 我看到很多教程在 UIView 上涂鸦线 但不在 UIImage 中 用户在图像上涂鸦后 我想将其保存为新图像 有线条的图像 我该如何在 Swift 中做到这一点 我只能在 UIVi
  • Python 用多个分隔符分割字符串并查找使用的分隔符

    如何使用多个分隔符分割字符串 并找出使用哪个分隔符分割 maxsplit 为 1 的字符串 import re string someText someValue re split string 1 returns someText som
  • 运行时错误 - 无法访问文件

    我有以下 VBA 脚本 它可以保存工作簿 并且效果很好 但是 如果再次单击 commandbutton1 它会正确显示选项框 您要替换该文件吗 是 否 取消 是 选项工作正常 但 否 和 取消 选项会弹出错误框 RunTime error
  • Matlab全局变量可以在Matlab中产生更好的性能吗?

    我讨厌使用全局变量 每个人都应该这样做 如果一种语言无法使用全局变量 则应该对其进行更新 目前 当效率是目标时 我不知道在 Matlab 中使用全局变量有什么好的替代方法 据我所知 只能通过 4 种方式在回调之间共享数据 嵌套函数 geta
  • Flexbox 列换行列表,无重叠项目

    我有一个列表 我想将其包装在最大宽度为 540px 的弹出模式上显示 通常 它看起来像这样 但如果添加太多名字 那么它就会像这样重叠 我的目标是通过隐藏溢出 仅显示基于数据的最大可能列 或使其可滚动来防止名称重叠 当项目数量和名称长度未知时
  • 使用 Flexbox 控制行中的项目数

    我想在第一行显示 4 个项目 但在第二行只显示 3 个项目 然后在第三行显示 4 个项目 在第四行显示 3 个项目 依此类推 我已经通过以下方式实现了这一点nth child但代码太多 不灵活 可扩展性差 可以用flex吗 还是网格 box
  • PHPExcel - 未正确获取引用另一个单元格的单元格值

    当我尝试从 Excel 文件中提取信息时遇到这个问题 这是我的情况 我有 34 个 Excel 文件 这些文件是我从各个用户那里收到的 我正在使用 PHP 版本 5 从 Excel 文件中提取 我的脚本将为每个文件循环 并根据工作表名称再次
  • Primefaces tabview tabChange 事件在显示选项卡后触发

    我正在使用 Primefaces 3 5 和 JSF2 1 Mojarra 开发一个项目 我创建了一个primefaces