[richfaces-svn-commits] JBoss Rich Faces SVN: r2128 - in trunk: samples/tabPanelDemo/src/main/webapp/pages and 2 other directories.
richfaces-svn-commits at lists.jboss.org
richfaces-svn-commits at lists.jboss.org
Tue Aug 7 20:10:27 EDT 2007
Author: nbelaevski
Date: 2007-08-07 20:10:27 -0400 (Tue, 07 Aug 2007)
New Revision: 2128
Modified:
trunk/framework/impl/src/main/java/org/richfaces/component/UISwitchablePanel.java
trunk/samples/tabPanelDemo/src/main/webapp/pages/index.jsp
trunk/ui/tabPanel/src/main/java/org/richfaces/component/UITabPanel.java
trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java
Log:
http://jira.jboss.com/jira/browse/RF-560 fixed
Modified: trunk/framework/impl/src/main/java/org/richfaces/component/UISwitchablePanel.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/component/UISwitchablePanel.java 2007-08-07 23:41:01 UTC (rev 2127)
+++ trunk/framework/impl/src/main/java/org/richfaces/component/UISwitchablePanel.java 2007-08-08 00:10:27 UTC (rev 2128)
@@ -117,6 +117,7 @@
if (valueBinding != null) {
valueBinding.setValue(facesContext, newValue);
setValue(null);
+ setLocalValueSet(false);
} else {
setValue(newValue);
}
@@ -235,23 +236,11 @@
}
}
- protected Object getRenderedValue() {
- if (renderedValue != null) {
- return renderedValue;
- }
-
- return getValue();
- }
-
- protected void setRenderedValue(Object renderedValue) {
- this.renderedValue = renderedValue;
- }
-
public Object saveState(FacesContext context) {
Object[] states = new Object[2];
states[0] = super.saveState(context);
states[1] = switchType;
-
+
return states;
}
@@ -260,7 +249,5 @@
super.restoreState(context, states[0]);
this.switchType = (String) states[1];
-
- this.renderedValue = getValue();
}
}
Modified: trunk/samples/tabPanelDemo/src/main/webapp/pages/index.jsp
===================================================================
--- trunk/samples/tabPanelDemo/src/main/webapp/pages/index.jsp 2007-08-07 23:41:01 UTC (rev 2127)
+++ trunk/samples/tabPanelDemo/src/main/webapp/pages/index.jsp 2007-08-08 00:10:27 UTC (rev 2128)
@@ -35,7 +35,7 @@
</h:form>
<h:form>
- <tabs:tabPanel valueChangeListener="#{bean.valueChanged}" headerSpacing="5px" immediate="false" tabClass="tabClass" activeTabClass="italic" width="100%" switchType="client" binding="#{bean.tabPanel}" value="#{bean.currentTab}" id="tab_panel" headerAlignment="left">
+ <tabs:tabPanel valueChangeListener="#{bean.valueChanged}" headerSpacing="5px" immediate="false" tabClass="tabClass" activeTabClass="italic" width="100%" switchType="client" binding="#{bean.tabPanel}" selectedTab="#{bean.currentTab}" id="tab_panel" headerAlignment="left">
<f:valueChangeListener type="org.richfaces.TabChangeListener"/>
<tabs:tab onclick="alert('\\'Canon\\' tab clicked');" disabled="#{bean.disabledTabName == 'canon'}" name="canon" label="Canon" switchType="server">
Modified: trunk/ui/tabPanel/src/main/java/org/richfaces/component/UITabPanel.java
===================================================================
--- trunk/ui/tabPanel/src/main/java/org/richfaces/component/UITabPanel.java 2007-08-07 23:41:01 UTC (rev 2127)
+++ trunk/ui/tabPanel/src/main/java/org/richfaces/component/UITabPanel.java 2007-08-08 00:10:27 UTC (rev 2128)
@@ -24,6 +24,8 @@
import java.util.Iterator;
import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
/**
* JSF component class
@@ -36,7 +38,7 @@
}
protected Iterator getSwitchedFacetsAndChildren() {
- final Object renderedValue = getRenderedValue();
+ final Object renderedValue = this.restoredRenderedValue;
return new TabsIterator(this, new TabsIterator.FilterCondition() {
@@ -62,21 +64,93 @@
return ((UITab) component).getName();
}
+ public ValueBinding getValueBinding(String name) {
+ if ("value".equals(name)) {
+ ValueBinding binding = super.getValueBinding("selectedTab");
+ if (binding == null) {
+ binding = super.getValueBinding(name);
+ }
+
+ return binding;
+ } else {
+ return super.getValueBinding(name);
+ }
+ }
+
+ public Object getValue() {
+ if (selectedTab != null) {
+ return selectedTab;
+ }
+
+ //do not use VB for selectedTab here, because it'll be returned for "value" VB queue
+ //see UITabPanel#getValueBinding(String) for more
+ return super.getValue();
+ }
+
+ public void setValue(Object value) {
+ super.setValue(value);
+ }
+
/**
* Get value for current selected tab. Possible classes - prefered {@link Integer} for tab number, or other Object for tab model value.
*
* @return selectedTab value from local variable or value bindings
*/
- public abstract Object getSelectedTab();
+ public Object getSelectedTab() {
+ return selectedTab;
+ }
/**
* Set currently selected tab.
*
* @param tab
*/
- public abstract void setSelectedTab(Object tab);
+ public void setSelectedTab(Object tab) {
+ this.selectedTab = tab;
+ }
+ public Object getRenderedValue() {
+ if (renderedValue != null) {
+ return renderedValue;
+ }
+ return getValue();
+ }
+
+ public void setRenderedValue(Object renderedValue) {
+ this.renderedValue = renderedValue;
+ }
+
+ private Object selectedTab;
+ private Object renderedValue;
+
+ public void setLocalValueSet(boolean localValueSet) {
+ //dumb hack to know that we've just update "value" vb
+ if (!localValueSet) {
+ this.selectedTab = null;
+ }
+ super.setLocalValueSet(localValueSet);
+ }
+
+ private transient Object restoredRenderedValue;
+
+ public Object saveState(FacesContext context) {
+ Object[] state = new Object[3];
+ state[0] = super.saveState(context);
+ state[1] = selectedTab;
+ state[2] = renderedValue;
+
+ return state;
+ }
+
+ public void restoreState(FacesContext context, Object state) {
+ Object[] states = (Object[]) state;
+ super.restoreState(context, states[0]);
+ this.selectedTab = states[1];
+ this.renderedValue = states[2];
+ this.restoredRenderedValue = getRenderedValue();
+ }
+
/**
* Create iterator for all tabs in this component ( in future, can be added special attribute for tabs collection.
* {@link Iterator#next()} method will return tab model - {@link Tab}
Modified: trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java
===================================================================
--- trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java 2007-08-07 23:41:01 UTC (rev 2127)
+++ trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java 2007-08-08 00:10:27 UTC (rev 2128)
@@ -209,20 +209,29 @@
//return null;
}
*/
+ private Object checkValue(Object value) {
+ if (value instanceof String) {
+ String s = (String) value;
+
+ if (s.length() == 0) {
+ return null;
+ } else {
+ return s;
+ }
+ }
+
+ return value;
+ }
+
public void encodeTabs(FacesContext context, UITabPanel tabPanel) throws IOException {
ComponentVariables componentVariables = ComponentsVariableResolver.getVariables(this, tabPanel);
- Object value = tabPanel.getValue();
- if (value instanceof String) {
- if (((String) value).length() == 0) {
- value = null;
- }
+ Object checkedValue = checkValue(tabPanel.getSelectedTab());
+ if (checkedValue == null) {
+ checkedValue = checkValue(tabPanel.getValue());
}
- if (value == null ||
- tabPanel.getSelectedTab() != null) {
- value = tabPanel.getSelectedTab();
- }
- boolean useFirstRenderedTab = value == null;
+
+ boolean useFirstRenderedTab = checkedValue == null;
UITabPanel pane = tabPanel;
UITab firstRenderedTab = null;
UITab activeTab = null;
@@ -238,13 +247,13 @@
if (useFirstRenderedTab) {
activeTab = firstRenderedTab;
- } else if (value.equals(tab.getName())) {
+ } else if (checkedValue.equals(tab.getName())) {
activeTab = tab;
}
} else {
if (!useFirstRenderedTab) {
- if (value.equals(tab.getName())) {
+ if (checkedValue.equals(tab.getName())) {
if (firstRenderedTab != null) {
activeTab = firstRenderedTab;
} else {
@@ -258,7 +267,11 @@
if (activeTab == null) {
throw new IllegalStateException("No active tabs!");
} else {
- tabPanel.setValue(activeTab.getName());
+ if (useFirstRenderedTab) {
+ tabPanel.setRenderedValue(activeTab.getName());
+ } else {
+ tabPanel.setRenderedValue(null);
+ }
}
ArrayList tabs = new ArrayList();
More information about the richfaces-svn-commits
mailing list