当前位置: 首页 > 知识库问答 >
问题:

Primefaces 3.3/3.4 tabview:tabChange上的ajax更新

梁丘翔
2023-03-14

使用以下代码,两个选项卡的内容将在tabChange事件中清除,而不是更新:

<h:form id="form">
    <p:tabView id="tabview">
        <p:ajax event="tabChange" listener="#{testBean.onChange}" update="@form"/>
        <p:tab title="Tab 1">
            <h:outputText value="Lorem ipsum dolor sit amet." id="ht1"/>
        </p:tab>
        <p:tab title="Tab 2">
            <h:outputText value="Donec et mi et arcu commodo hendrerit." id="ht2"/>
        </p:tab>
    </p:tabView>
</h:form>

onChange方法是空方法是我的测试代码。

我遗漏了一些东西,但我找不到什么。我做错了什么?

编辑

我正在使用ViewScope bean。

我尝试过date="@form"date=": form"date=": form: tabview",同样的问题也会出现。

如果我使用update=“ht1,ht2”,一切都很好,但在我的onChange方法中,我希望以编程方式选择我想要激活的选项卡(在我的真实代码中有一种方法可以验证一些数据:如果验证失败,我希望保留在选项卡1上,如果可以,请转到选项卡2)。为了实现这一点,我想我必须更新整个tabview组件,而不仅仅是选项卡的内容。但也许我错了?

完整代码

我做了一些修改,下面是我更新的代码,但仍然不起作用。

托管bean:

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.event.TabChangeEvent;

@ManagedBean
@ViewScoped
public class TestBean implements Serializable {

    private int idx;
    private String s1 = "test 1";
    private String s2 = "test 2";

    public TestBean() {
        System.out.println("TestBean.init");
    }

    public void onChange(TabChangeEvent e){
        s1 = "TEST TEST";
        s2 = "TEST TEST";
    }

    public int getIdx() {
        return idx;
    }

    public void setIdx(int idx) {
        this.idx = idx;
    }

    public String getS1() {
        return s1;
    }

    public void setS1(String s1) {
        this.s1 = s1;
    }

    public String getS2() {
        return s2;
    }

    public void setS2(String s2) {
        this.s2 = s2;
    }
}

小面:

<?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://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form id="form">
            <p:tabView id="tabview" activeIndex="#{testBean.idx}">
                <p:ajax event="tabChange" listener="#{testBean.onChange}" update="@form"/>
                <p:tab title="Tab 1">
                    <h:outputText value="#{testBean.s1}" id="ht1"/>
                </p:tab>
                <p:tab title="Tab 2">
                    <h:outputText value="#{testBean.s2}" id="ht2"/>
                </p:tab>
            </p:tabView>
            <h:messages/>
        </h:form>
    </h:body>
</html>

使现代化

我将Primefaces jar从3.4改为3.2,神奇的是,这种行为不再发生了。然后我试着用3.3和轰,错误。我将在Primefaces论坛上询问这是否是一个已知的bug。

共有2个答案

楮杰
2023-03-14

仅绑定activeIndex属性是不够的。您还必须触发ajaxsubmit来更新服务器上的值。因此,它应该是:

<p:tabView activeIndex="#{bean.index}">
    <p:ajax event="tabChange" />
</p:tabView>
养昊天
2023-03-14

您应该使用activeIndex

 <p:tabView id="tabview" activeIndex="#{testBean.tabIndex}" >

在onChange方法中,验证后设置正确的tabindex。

 类似资料:
  • 问题内容: 我想向页面URL 添加一些参数。我正在加载这样的内容: 如何更改具有相同参数的URL ? 问题答案: 您可以使用HTML5 pushState API来实现。但是,只有最新的浏览器才支持它,而IE9甚至不支持IE。没有办法做到这一点。但是,有一个约定,您将使用location.hash来指示页面的状态已被ajax请求修改的页面。有关如何使用URL散列来表示你的页面上状态的更多信息,你可

  • 问题内容: 因此,我正在使用WordPress网站。我在获取用户输入以更新数据库方面有些困难。 JS: PHP(edit-items.php) 每当我尝试更新表时,我都能在前端成功完成此操作,但是在刷新时,数据更改不会停止。检查数据库进一步验证数据是否没有更改…似乎“成功”正在AJAX中传递,但是由于某种原因,它没有更新数据库。 对此有任何见识会有所帮助! *决定 *编辑 以开始使用该方法。一切都

  • 问题内容: 现在,使用AJAX的最大问题是,如果我在一个页面上使用AJAX,请转到另一个页面,然后使用浏览器的“后退”按钮返回使用AJAX更改的所有内容。 我曾考虑过使用jQuery Addresss 插件来解决该问题,但我不喜欢它仅用“#whatever.html”来修改URL而不是完全更改它。 理想情况下,当我进行相关的AJAX调用时,我希望URL从“ www.example.com/p:2/

  • 问题内容: 我有一个自己开发的网站,该网站充分利用了Javascript,而在某些方面却很少使用AJAX。该网站在iPhone上运行良好,直到我添加了创建HttpRequest句柄的功能,此时iPhone上的所有Javascript现在都默默失败。所以,我有几个问题。 (1)看来AJAX在iPhone上根本不起作用。这是真的?如果没有,如何修改HttpRequest创建函数以适应iPhone? (

  • 本文向大家介绍ajax图片上传,图片异步上传,更新实例,包括了ajax图片上传,图片异步上传,更新实例的使用技巧和注意事项,需要的朋友参考一下 最近在研究ajax图片上传,图片异步上传,更新,留作参考。 直接上源码吧: js源码: js:  html代码: 服务器端使用一般处理程序: 程序使用的是framework4.0,所以使用了一些扩展方法。 JsonTesult类代码: StatusMess

  • 这里的例子是——https://facebook.github.io/react/tips/initial-ajax.html -修改如下。 是加载时的“占位符”,并传递给