This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/master by this push:
new ce89b334 EMPIREDB-438 TabViewTag: allow tabs inside tables
ce89b334 is described below
commit ce89b334907b16cc0b9bfa204d4be0ba4a1a84b4
Author: Rainer Döbele <[email protected]>
AuthorDate: Tue Oct 8 18:31:29 2024 +0200
EMPIREDB-438
TabViewTag: allow tabs inside tables
---
.../empire/jakarta/components/TabViewTag.java | 139 +++++++++++++--------
.../apache/empire/jsf2/components/TabViewTag.java | 139 +++++++++++++--------
2 files changed, 178 insertions(+), 100 deletions(-)
diff --git
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/TabViewTag.java
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/TabViewTag.java
index f771e01f..9722291b 100644
---
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/TabViewTag.java
+++
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/TabViewTag.java
@@ -162,6 +162,57 @@ public class TabViewTag extends UIOutput // implements
NamingContainer
return mode;
}
+ public int getActivePageIndex()
+ {
+ Object active =
this.helper.getTagAttributeValue(this.TAB_ACTIVE_INDEX);
+ return ObjectUtils.getInteger(active);
+ }
+
+ public void setActivePageIndex(int activeIndex)
+ {
+ ValueExpression ve = this.getValueExpression(this.TAB_ACTIVE_INDEX);
+ if (ve != null)
+ { // set active index
+ FacesContext fc = FacesUtils.getContext();
+ ve.setValue(fc.getELContext(), activeIndex);
+ }
+ else
+ { // save activeIndex
+ getAttributes().put(this.TAB_ACTIVE_INDEX, activeIndex);
+ }
+ }
+
+ public void setActiveTab(ActionEvent event)
+ {
+ log.debug("setActiveTab");
+ // done
+ UIComponent comp = event.getComponent();
+ String tabNo = comp.getId().substring(this.TABLINK_ID_PREFIX.length());
+ int pageIndex = ObjectUtils.getInteger(tabNo);
+ if (pageIndex == getActivePageIndex())
+ { // already set
+ log.warn("setActiveTab is called for active page!");
+ return;
+ }
+
+ // set new Page
+ setActivePageIndex(pageIndex);
+
+ // TabChangeListener
+ Object tcl = getAttributes().get("tabChangedListener");
+ if (tcl != null)
+ {
+ if (!(tcl instanceof MethodExpression))
+ {
+ log.error("tabChangedListener is not a valid method
expression!");
+ return;
+ }
+ FacesContext fc = FacesUtils.getContext();
+ MethodExpression methodExpression = (MethodExpression) tcl;
+ methodExpression.invoke(fc.getELContext(), new Object[] {
pageIndex });
+ }
+ }
+
@Override
public void encodeBegin(FacesContext context)
throws IOException
@@ -268,13 +319,23 @@ public class TabViewTag extends UIOutput // implements
NamingContainer
super.decode(context);
}
- /*
@Override
public void processDecodes(FacesContext context)
{
+ setRenderTabs(context);
super.processDecodes(context);
}
- */
+
+ @Override
+ public void processValidators(FacesContext context)
+ {
+ setRenderTabs(context);
+ super.processValidators(context);
+ }
+
+ /*
+ * internal
+ */
protected void encodeTabs(FacesContext context, ResponseWriter writer,
String showTabBlindJs)
throws IOException
@@ -306,9 +367,9 @@ public class TabViewTag extends UIOutput // implements
NamingContainer
boolean active = (index == activeIndex);
TabPageTag page = (TabPageTag) c;
- // render tab-link? default is true
- boolean rendered =
ObjectUtils.getBoolean(ObjectUtils.coalesce(page.getAttributes().get(this.TAB_RENDERED_ATTRIBUTE),
true));
- if (!rendered)
+ // render tab-page? default is true
+ boolean visible = isPageVisible(page);
+ if (!visible)
{
// dont render content
page.setRendered(false);
@@ -396,55 +457,33 @@ public class TabViewTag extends UIOutput // implements
NamingContainer
return link;
}
- public int getActivePageIndex()
- {
- Object active =
this.helper.getTagAttributeValue(this.TAB_ACTIVE_INDEX);
- return ObjectUtils.getInteger(active);
- }
-
- public void setActivePageIndex(int activeIndex)
- {
- ValueExpression ve = this.getValueExpression(this.TAB_ACTIVE_INDEX);
- if (ve != null)
- { // set active index
- FacesContext fc = FacesUtils.getContext();
- ve.setValue(fc.getELContext(), activeIndex);
- }
- else
- { // save activeIndex
- getAttributes().put(this.TAB_ACTIVE_INDEX, activeIndex);
- }
- }
-
- public void setActiveTab(ActionEvent event)
+ protected void setRenderTabs(FacesContext context)
{
- log.debug("setActiveTab");
- // done
- UIComponent comp = event.getComponent();
- String tabNo = comp.getId().substring(this.TABLINK_ID_PREFIX.length());
- int pageIndex = ObjectUtils.getInteger(tabNo);
- if (pageIndex == getActivePageIndex())
- { // already set
- log.warn("setActiveTab is called for active page!");
- return;
- }
-
- // set new Page
- setActivePageIndex(pageIndex);
-
- // TabChangeListener
- Object tcl = getAttributes().get("tabChangedListener");
- if (tcl != null)
+ if (getFacetCount()<1)
+ return; // No TabPages yet
+ // the tab panel
+ UIComponent panel = getFacets().values().iterator().next();
+ int tabIndex=0;
+ int activeIndex = getActivePageIndex();
+ for (UIComponent page : panel.getChildren())
{
- if (!(tcl instanceof MethodExpression))
+ if (!(page instanceof TabPageTag) ||
!isPageVisible((TabPageTag)page))
{
- log.error("tabChangedListener is not a valid method
expression!");
- return;
+ continue;
}
- FacesContext fc = FacesUtils.getContext();
- MethodExpression methodExpression = (MethodExpression) tcl;
- methodExpression.invoke(fc.getELContext(), new Object[] {
pageIndex });
+ // check active
+ boolean rendered = (tabIndex==activeIndex);
+ if (page.isRendered()!=rendered)
+ {
+ // log.debug("Tab-Page {} rendered has changed to {}",
tabIndex, rendered);
+ page.setRendered(rendered);
+ }
+ tabIndex++;
}
-
+ }
+
+ protected boolean isPageVisible(TabPageTag page)
+ {
+ return
ObjectUtils.getBoolean(ObjectUtils.coalesce(page.getAttributes().get(this.TAB_RENDERED_ATTRIBUTE),
true));
}
}
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TabViewTag.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TabViewTag.java
index 550627a0..ceebe4ab 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TabViewTag.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TabViewTag.java
@@ -162,6 +162,57 @@ public class TabViewTag extends UIOutput // implements
NamingContainer
return mode;
}
+ public int getActivePageIndex()
+ {
+ Object active =
this.helper.getTagAttributeValue(this.TAB_ACTIVE_INDEX);
+ return ObjectUtils.getInteger(active);
+ }
+
+ public void setActivePageIndex(int activeIndex)
+ {
+ ValueExpression ve = this.getValueExpression(this.TAB_ACTIVE_INDEX);
+ if (ve != null)
+ { // set active index
+ FacesContext fc = FacesUtils.getContext();
+ ve.setValue(fc.getELContext(), activeIndex);
+ }
+ else
+ { // save activeIndex
+ getAttributes().put(this.TAB_ACTIVE_INDEX, activeIndex);
+ }
+ }
+
+ public void setActiveTab(ActionEvent event)
+ {
+ log.debug("setActiveTab");
+ // done
+ UIComponent comp = event.getComponent();
+ String tabNo = comp.getId().substring(this.TABLINK_ID_PREFIX.length());
+ int pageIndex = ObjectUtils.getInteger(tabNo);
+ if (pageIndex == getActivePageIndex())
+ { // already set
+ log.warn("setActiveTab is called for active page!");
+ return;
+ }
+
+ // set new Page
+ setActivePageIndex(pageIndex);
+
+ // TabChangeListener
+ Object tcl = getAttributes().get("tabChangedListener");
+ if (tcl != null)
+ {
+ if (!(tcl instanceof MethodExpression))
+ {
+ log.error("tabChangedListener is not a valid method
expression!");
+ return;
+ }
+ FacesContext fc = FacesUtils.getContext();
+ MethodExpression methodExpression = (MethodExpression) tcl;
+ methodExpression.invoke(fc.getELContext(), new Object[] {
pageIndex });
+ }
+ }
+
@Override
public void encodeBegin(FacesContext context)
throws IOException
@@ -268,13 +319,23 @@ public class TabViewTag extends UIOutput // implements
NamingContainer
super.decode(context);
}
- /*
@Override
public void processDecodes(FacesContext context)
{
+ setRenderTabs(context);
super.processDecodes(context);
}
- */
+
+ @Override
+ public void processValidators(FacesContext context)
+ {
+ setRenderTabs(context);
+ super.processValidators(context);
+ }
+
+ /*
+ * internal
+ */
protected void encodeTabs(FacesContext context, ResponseWriter writer,
String showTabBlindJs)
throws IOException
@@ -306,9 +367,9 @@ public class TabViewTag extends UIOutput // implements
NamingContainer
boolean active = (index == activeIndex);
TabPageTag page = (TabPageTag) c;
- // render tab-link? default is true
- boolean rendered =
ObjectUtils.getBoolean(ObjectUtils.coalesce(page.getAttributes().get(this.TAB_RENDERED_ATTRIBUTE),
true));
- if (!rendered)
+ // render tab-page? default is true
+ boolean visible = isPageVisible(page);
+ if (!visible)
{
// dont render content
page.setRendered(false);
@@ -396,55 +457,33 @@ public class TabViewTag extends UIOutput // implements
NamingContainer
return link;
}
- public int getActivePageIndex()
- {
- Object active =
this.helper.getTagAttributeValue(this.TAB_ACTIVE_INDEX);
- return ObjectUtils.getInteger(active);
- }
-
- public void setActivePageIndex(int activeIndex)
- {
- ValueExpression ve = this.getValueExpression(this.TAB_ACTIVE_INDEX);
- if (ve != null)
- { // set active index
- FacesContext fc = FacesUtils.getContext();
- ve.setValue(fc.getELContext(), activeIndex);
- }
- else
- { // save activeIndex
- getAttributes().put(this.TAB_ACTIVE_INDEX, activeIndex);
- }
- }
-
- public void setActiveTab(ActionEvent event)
+ protected void setRenderTabs(FacesContext context)
{
- log.debug("setActiveTab");
- // done
- UIComponent comp = event.getComponent();
- String tabNo = comp.getId().substring(this.TABLINK_ID_PREFIX.length());
- int pageIndex = ObjectUtils.getInteger(tabNo);
- if (pageIndex == getActivePageIndex())
- { // already set
- log.warn("setActiveTab is called for active page!");
- return;
- }
-
- // set new Page
- setActivePageIndex(pageIndex);
-
- // TabChangeListener
- Object tcl = getAttributes().get("tabChangedListener");
- if (tcl != null)
+ if (getFacetCount()<1)
+ return; // No TabPages yet
+ // the tab panel
+ UIComponent panel = getFacets().values().iterator().next();
+ int tabIndex=0;
+ int activeIndex = getActivePageIndex();
+ for (UIComponent page : panel.getChildren())
{
- if (!(tcl instanceof MethodExpression))
+ if (!(page instanceof TabPageTag) ||
!isPageVisible((TabPageTag)page))
{
- log.error("tabChangedListener is not a valid method
expression!");
- return;
+ continue;
}
- FacesContext fc = FacesUtils.getContext();
- MethodExpression methodExpression = (MethodExpression) tcl;
- methodExpression.invoke(fc.getELContext(), new Object[] {
pageIndex });
+ // check active
+ boolean rendered = (tabIndex==activeIndex);
+ if (page.isRendered()!=rendered)
+ {
+ // log.debug("Tab-Page {} rendered has changed to {}",
tabIndex, rendered);
+ page.setRendered(rendered);
+ }
+ tabIndex++;
}
-
+ }
+
+ protected boolean isPageVisible(TabPageTag page)
+ {
+ return
ObjectUtils.getBoolean(ObjectUtils.coalesce(page.getAttributes().get(this.TAB_RENDERED_ATTRIBUTE),
true));
}
}