次のコードを使用すると、2 つのタブのコンテンツが更新される代わりに、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 メソッドは空のメソッドであり、私のテスト コードです。
ここに何かが欠けていますが、何が見つかりません。私は何を間違っていますか?
編集
ViewScoped Bean を使用しています。
を試しましたがupdate="@form"
、同じ問題が発生します。update=":form"
update=":form:tabview"
を使用するupdate="ht1, ht2"
と、すべて問題ありませんが、onChange メソッドで、アクティブにしたいタブをプログラムで選択したいと思います (実際のコードには、一部のデータを検証する処理があります: 検証が失敗した場合は、タブ 1 にとどまり、問題がなければタブ 2 に進みます)。それを達成するには、タブのコンテンツだけでなく、タブビュー コンポーネント全体を更新する必要があると思います。しかし、多分私は間違っていますか?
完全なコード
いくつかの変更を加えましたが、まだ機能しない更新されたコードを次に示します。
マネージド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 フォーラムで質問します。