Skip to content

Commit

Permalink
Fix primefaces#11553 - TabView: Introduce TabEvent#index
Browse files Browse the repository at this point in the history
  • Loading branch information
Rapster committed Mar 3, 2024
1 parent a6c22d1 commit f550c3c
Show file tree
Hide file tree
Showing 9 changed files with 102 additions and 126 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@

import javax.el.MethodExpression;
import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
Expand All @@ -43,6 +44,7 @@
import org.primefaces.event.TabChangeEvent;
import org.primefaces.event.TabCloseEvent;
import org.primefaces.event.TabEvent;
import org.primefaces.util.ComponentTraversalUtils;
import org.primefaces.util.ComponentUtils;
import org.primefaces.util.Constants;
import org.primefaces.util.MapBuilder;
Expand Down Expand Up @@ -115,43 +117,33 @@ public void queueEvent(FacesEvent event) {
boolean repeating = isRepeating();
AjaxBehaviorEvent behaviorEvent = (AjaxBehaviorEvent) event;

if ("tabChange".equals(eventName)) {
String tabClientId = params.get(clientId + "_newTab");
TabChangeEvent changeEvent = new TabChangeEvent(this, behaviorEvent.getBehavior(), findTab(tabClientId));

if (repeating) {
int index = Integer.parseInt(params.get(clientId + "_tabindex"));
setIndex(index);
changeEvent.setData(getIndexData());
changeEvent.setTab(getDynamicTab());
}
String tabClientId = params.get(clientId + "_currentTab");
int tabindex = Integer.parseInt(params.get(clientId + "_tabindex"));

changeEvent.setPhaseId(behaviorEvent.getPhaseId());
if (repeating) {
setIndex(tabindex);
}

super.queueEvent(changeEvent);
Object data = repeating ? getIndexData() : null;
Tab tab = repeating ? getDynamicTab() : findTab(tabClientId);

if (repeating) {
setIndex(-1);
}
TabEvent<?> changeEvent;
if ("tabChange".equals(eventName)) {
changeEvent = new TabChangeEvent<>(this, behaviorEvent.getBehavior(), tab, data, eventName, tabindex);
}
else if ("tabClose".equals(eventName)) {
String tabClientId = params.get(clientId + "_tabId");
TabCloseEvent closeEvent = new TabCloseEvent(this, behaviorEvent.getBehavior(), findTab(tabClientId));

if (repeating) {
int index = Integer.parseInt(params.get(clientId + "_tabindex"));
setIndex(index);
closeEvent.setData(getIndexData());
closeEvent.setTab(getDynamicTab());
}
changeEvent = new TabCloseEvent<>(this, behaviorEvent.getBehavior(), tab, data, eventName, tabindex);
}
else {
throw new FacesException("Unsupported event: " + eventName);
}

closeEvent.setPhaseId(behaviorEvent.getPhaseId());
changeEvent.setPhaseId(behaviorEvent.getPhaseId());

super.queueEvent(closeEvent);
super.queueEvent(changeEvent);

if (repeating) {
setIndex(-1);
}
if (repeating) {
setIndex(-1);
}
}
else {
Expand Down Expand Up @@ -214,4 +206,4 @@ public AccordionState getMultiViewState(boolean create) {
public void resetMultiViewState() {
setActiveIndex(null);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce
acco.setIndex(-1);
}
else {
String tabClientId = params.get(clientId + "_newTab");
String tabClientId = params.get(clientId + "_currentTab");
Tab tabToLoad = acco.findTab(tabClientId);
tabToLoad.encodeAll(context);
tabToLoad.setLoaded(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import javax.el.ELContext;

import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
Expand All @@ -39,6 +40,7 @@
import org.primefaces.el.ValueExpressionAnalyzer;
import org.primefaces.event.TabChangeEvent;
import org.primefaces.event.TabCloseEvent;
import org.primefaces.event.TabEvent;
import org.primefaces.util.ComponentUtils;
import org.primefaces.util.Constants;
import org.primefaces.util.ConsumerThree;
Expand Down Expand Up @@ -111,43 +113,33 @@ public void queueEvent(FacesEvent event) {
boolean repeating = isRepeating();
AjaxBehaviorEvent behaviorEvent = (AjaxBehaviorEvent) event;

if ("tabChange".equals(eventName)) {
String tabClientId = params.get(clientId + "_newTab");
TabChangeEvent changeEvent = new TabChangeEvent(this, behaviorEvent.getBehavior(), findTab(tabClientId));

if (repeating) {
int tabindex = Integer.parseInt(params.get(clientId + "_tabindex"));
setIndex(tabindex);
changeEvent.setData(getIndexData());
changeEvent.setTab(getDynamicTab());
}
String tabClientId = params.get(clientId + "_currentTab");
int tabindex = Integer.parseInt(params.get(clientId + "_tabindex"));

changeEvent.setPhaseId(behaviorEvent.getPhaseId());
if (repeating) {
setIndex(tabindex);
}

super.queueEvent(changeEvent);
Object data = repeating ? getIndexData() : null;
Tab tab = repeating ? getDynamicTab() : findTab(tabClientId);

if (repeating) {
setIndex(-1);
}
TabEvent<?> changeEvent;
if ("tabChange".equals(eventName)) {
changeEvent = new TabChangeEvent<>(this, behaviorEvent.getBehavior(), tab, data, eventName, tabindex);
}
else if ("tabClose".equals(eventName)) {
String tabClientId = params.get(clientId + "_closeTab");
TabCloseEvent closeEvent = new TabCloseEvent(this, behaviorEvent.getBehavior(), findTab(tabClientId));

if (repeating) {
int tabindex = Integer.parseInt(params.get(clientId + "_tabindex"));
setIndex(tabindex);
closeEvent.setData(getIndexData());
closeEvent.setTab(getDynamicTab());
}
changeEvent = new TabCloseEvent<>(this, behaviorEvent.getBehavior(), tab, data, eventName, tabindex);
}
else {
throw new FacesException("Unsupported event: " + eventName);
}

closeEvent.setPhaseId(behaviorEvent.getPhaseId());
changeEvent.setPhaseId(behaviorEvent.getPhaseId());

super.queueEvent(closeEvent);
super.queueEvent(changeEvent);

if (repeating) {
setIndex(-1);
}
if (repeating) {
setIndex(-1);
}
}
else {
Expand Down Expand Up @@ -259,4 +251,4 @@ public void resetMultiViewState() {
setActiveIndex(0);
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce
tabView.setIndex(-1);
}
else {
String tabClientId = params.get(clientId + "_newTab");
String tabClientId = params.get(clientId + "_currentTab");
Tab tabToLoad = tabView.findTab(tabClientId);
tabToLoad.encodeAll(context);

Expand Down
31 changes: 4 additions & 27 deletions primefaces/src/main/java/org/primefaces/event/TabChangeEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,33 +28,10 @@

import org.primefaces.component.tabview.Tab;

public class TabChangeEvent<T> extends AbstractAjaxBehaviorEvent implements TabEvent<T> {
@Deprecated
public class TabChangeEvent<T> extends TabEvent<T> {

private static final long serialVersionUID = 1L;

private transient Tab tab;
private T data;

public TabChangeEvent(UIComponent component, Behavior behavior, Tab tab) {
super(component, behavior);
this.tab = tab;
}

@Override
public Tab getTab() {
return tab;
}

public void setTab(Tab tab) {
this.tab = tab;
}

@Override
public T getData() {
return data;
}

public void setData(T data) {
this.data = data;
public TabChangeEvent(UIComponent component, Behavior behavior, Tab tab, T data, String type, int index) {
super(component, behavior, tab, data, type, index);
}
}
31 changes: 4 additions & 27 deletions primefaces/src/main/java/org/primefaces/event/TabCloseEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,33 +27,10 @@
import javax.faces.component.behavior.Behavior;
import org.primefaces.component.tabview.Tab;

public class TabCloseEvent<T> extends AbstractAjaxBehaviorEvent implements TabEvent<T> {
@Deprecated
public class TabCloseEvent<T> extends TabEvent<T> {

private static final long serialVersionUID = 1L;

private transient Tab tab;
private T data;

public TabCloseEvent(UIComponent component, Behavior behavior, Tab tab) {
super(component, behavior);
this.tab = tab;
}

@Override
public Tab getTab() {
return tab;
}

public void setTab(Tab tab) {
this.tab = tab;
}

@Override
public T getData() {
return data;
}

public void setData(T data) {
this.data = data;
public TabCloseEvent(UIComponent component, Behavior behavior, Tab tab, T data, String type, int index) {
super(component, behavior, tab, data, type, index);
}
}
44 changes: 41 additions & 3 deletions primefaces/src/main/java/org/primefaces/event/TabEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,49 @@
*/
package org.primefaces.event;

import javax.faces.component.UIComponent;
import javax.faces.component.behavior.Behavior;

import org.primefaces.component.tabview.Tab;

public interface TabEvent<T> {
public class TabEvent<T> extends AbstractAjaxBehaviorEvent {

private transient Tab tab;
private T data;
private String type;
private int index;

public TabEvent(UIComponent component, Behavior behavior, Tab tab, T data, String type, int index) {
super(component, behavior);
this.tab = tab;
this.data = data;
this.type = type;
this.index = index;
}

public Tab getTab() {
return tab;
}

@Deprecated
public void setTab(Tab tab) {
this.tab = tab;
}

public T getData() {
return data;
}

@Deprecated
public void setData(T data) {
this.data = data;
}

Tab getTab();
public int getIndex() {
return index;
}

T getData();
public String getType() {
return type;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ PrimeFaces.widget.AccordionPanel = PrimeFaces.widget.BaseWidget.extend({
ignoreAutoUpdate: true,
params: [
{ name: this.id + '_contentLoad', value: true },
{ name: this.id + '_newTab', value: panel.attr('id') },
{ name: this.id + '_currentTab', value: panel.attr('id') },
{ name: this.id + '_tabindex', value: parseInt(panel.index() / 2) }
],
onsuccess: function(responseXML, status, xhr) {
Expand Down Expand Up @@ -370,7 +370,7 @@ PrimeFaces.widget.AccordionPanel = PrimeFaces.widget.BaseWidget.extend({
if (this.hasBehavior('tabChange')) {
var ext = {
params: [
{ name: this.id + '_newTab', value: panel.attr('id') },
{ name: this.id + '_currentTab', value: panel.attr('id') },
{ name: this.id + '_tabindex', value: parseInt(panel.index() / 2) }
]
};
Expand All @@ -395,7 +395,7 @@ PrimeFaces.widget.AccordionPanel = PrimeFaces.widget.BaseWidget.extend({
global: false,
params: [
{ name: this.id + '_skipChildren', value: true },
{ name: this.id + '_newTab', value: panel.attr('id') },
{ name: this.id + '_currentTab', value: panel.attr('id') },
{ name: this.id + '_tabindex', value: parseInt(panel.index() / 2) }
]
};
Expand Down Expand Up @@ -439,7 +439,7 @@ PrimeFaces.widget.AccordionPanel = PrimeFaces.widget.BaseWidget.extend({
global: false,
params: [
{ name: this.id + '_skipChildren', value: true },
{ name: this.id + '_newTab', value: panel.attr('id') },
{ name: this.id + '_currentTab', value: panel.attr('id') },
{ name: this.id + '_tabindex', value: parseInt(index) }
]
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,7 @@ PrimeFaces.widget.TabView = PrimeFaces.widget.DeferredWidget.extend({
ignoreAutoUpdate: true,
params: [
{name: this.id + '_contentLoad', value: true},
{name: this.id + '_newTab', value: newPanel.attr('id')},
{name: this.id + '_currentTab', value: newPanel.attr('id')},
{name: this.id + '_tabindex', value: tabIndex}
],
onsuccess: function(responseXML, status, xhr) {
Expand Down Expand Up @@ -749,7 +749,7 @@ PrimeFaces.widget.TabView = PrimeFaces.widget.DeferredWidget.extend({
fireTabChangeEvent: function(panel) {
var ext = {
params: [
{name: this.id + '_newTab', value: panel.attr('id')},
{name: this.id + '_currentTab', value: panel.attr('id')},
{name: this.id + '_tabindex', value: panel.data('index')}
]
};
Expand All @@ -767,7 +767,7 @@ PrimeFaces.widget.TabView = PrimeFaces.widget.DeferredWidget.extend({
if(this.hasBehavior('tabClose')) {
var ext = {
params: [
{name: this.id + '_closeTab', value: id},
{name: this.id + '_currentTab', value: id},
{name: this.id + '_tabindex', value: index}
]
};
Expand Down

0 comments on commit f550c3c

Please sign in to comment.