Author: artdaw
Date: 2011-02-16 12:32:02 -0500 (Wed, 16 Feb 2011)
New Revision: 21709
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabPanelRenderer.java
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabRenderer.java
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TogglePanelRenderer.java
trunk/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/tabPanel.js
Log:
RF-10448: @action and @actionListener are fixed for Tab
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabPanelRenderer.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabPanelRenderer.java 2011-02-16
17:15:09 UTC (rev 21708)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabPanelRenderer.java 2011-02-16
17:32:02 UTC (rev 21709)
@@ -22,29 +22,6 @@
package org.richfaces.renderkit.html;
-import static org.richfaces.component.AbstractTogglePanelTitledItem.HeaderStates.active;
-import static
org.richfaces.component.AbstractTogglePanelTitledItem.HeaderStates.disabled;
-import static
org.richfaces.component.AbstractTogglePanelTitledItem.HeaderStates.inactive;
-import static org.richfaces.renderkit.HtmlConstants.CLASS_ATTRIBUTE;
-import static org.richfaces.renderkit.HtmlConstants.DIV_ELEM;
-import static org.richfaces.renderkit.HtmlConstants.ID_ATTRIBUTE;
-import static org.richfaces.renderkit.HtmlConstants.SPAN_ELEM;
-import static org.richfaces.renderkit.HtmlConstants.STYLE_ATTRIBUTE;
-import static org.richfaces.renderkit.HtmlConstants.TBODY_ELEMENT;
-import static org.richfaces.renderkit.HtmlConstants.TD_ELEM;
-import static org.richfaces.renderkit.HtmlConstants.TR_ELEMENT;
-import static org.richfaces.renderkit.RenderKitUtils.renderPassThroughAttributes;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.faces.application.ResourceDependencies;
-import javax.faces.application.ResourceDependency;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
import org.ajax4jsf.javascript.JSObject;
import org.richfaces.cdk.annotations.JsfRenderer;
import org.richfaces.component.*;
@@ -53,6 +30,18 @@
import org.richfaces.renderkit.HtmlConstants;
import org.richfaces.renderkit.RenderKitUtils;
+import javax.faces.application.ResourceDependencies;
+import javax.faces.application.ResourceDependency;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import java.io.IOException;
+import java.util.Map;
+
+import static org.richfaces.component.AbstractTogglePanelTitledItem.HeaderStates.*;
+import static org.richfaces.renderkit.HtmlConstants.*;
+import static org.richfaces.renderkit.RenderKitUtils.renderPassThroughAttributes;
+
/**
* @author akolonitsky
* @since 2010-08-24
@@ -253,16 +242,10 @@
@Override
protected Map<String, Object> getScriptObjectOptions(FacesContext context,
UIComponent component) {
- AbstractTogglePanel panel = (AbstractTogglePanel) component;
+ Map<String, Object> options = super.getScriptObjectOptions(context,
component);
- Map<String, Object> options = new HashMap<String, Object>();
- options.put("activeItem", panel.getActiveItem());
- options.put("cycledSwitching", panel.isCycledSwitching());
options.put("isKeepHeight", attributeAsString(component,
"height").length() > 0);
- addEventOption(context, panel, options, ITEM_CHANGE);
- addEventOption(context, panel, options, BEFORE_ITEM_CHANGE);
-
return options;
}
Modified: trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabRenderer.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabRenderer.java 2011-02-16
17:15:09 UTC (rev 21708)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabRenderer.java 2011-02-16
17:32:02 UTC (rev 21709)
@@ -22,10 +22,11 @@
package org.richfaces.renderkit.html;
+import com.google.common.base.Predicate;
import org.ajax4jsf.javascript.JSObject;
import org.richfaces.cdk.annotations.JsfRenderer;
-import org.richfaces.component.AbstractTab;
-import org.richfaces.component.AbstractTogglePanelItemInterface;
+import org.richfaces.component.*;
+import org.richfaces.context.ExtendedPartialViewContext;
import org.richfaces.renderkit.HtmlConstants;
import javax.faces.application.ResourceDependencies;
@@ -33,6 +34,7 @@
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
+import javax.faces.event.ActionEvent;
import java.io.IOException;
import java.util.Map;
@@ -55,6 +57,37 @@
public class TabRenderer extends TogglePanelItemRenderer {
@Override
+ protected void doDecode(FacesContext context, UIComponent component) {
+
+ Map<String, String> requestMap =
+ context.getExternalContext().getRequestParameterMap();
+
+ AbstractTab tab = (AbstractTab) component;
+ String compClientId = component.getClientId(context);
+ if (requestMap.get(compClientId) != null) {
+ AbstractTabPanel parentTabPanel = getParentTabPanel(tab);
+
+ if (parentTabPanel.isImmediate()) {
+ tab.setImmediate(true);
+ }
+ new ActionEvent(tab).queue();
+
+ if (context.getPartialViewContext().isPartialRequest()) {
+
context.getPartialViewContext().getRenderIds().add(component.getClientId(context));
+ addOnCompleteParam(context, tab.getName(),
tab.getTabPanel().getClientId(context));
+ }
+ }
+ }
+
+ protected static void addOnCompleteParam(FacesContext context, String newValue,
String panelId) {
+ StringBuilder onComplete = new StringBuilder();
+ onComplete.append("RichFaces.$('").append(panelId)
+
.append("').onCompleteHandler('").append(newValue).append("');");
+
+
ExtendedPartialViewContext.getInstance(context).appendOncomplete(onComplete.toString());
+ }
+
+ @Override
protected void doEncodeItemBegin(ResponseWriter writer, FacesContext context,
UIComponent component)
throws IOException {
@@ -129,5 +162,14 @@
protected Class<? extends UIComponent> getComponentClass() {
return AbstractTab.class;
}
+
+ private static AbstractTabPanel getParentTabPanel(AbstractTab menuItem) {
+ return (AbstractTabPanel) ComponentIterators.getParent(menuItem, new
Predicate<UIComponent>() {
+ public boolean apply(UIComponent component) {
+ return component instanceof AbstractTabPanel;
+ }
+ });
+ }
+
}
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TogglePanelRenderer.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TogglePanelRenderer.java 2011-02-16
17:15:09 UTC (rev 21708)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TogglePanelRenderer.java 2011-02-16
17:32:02 UTC (rev 21709)
@@ -111,10 +111,10 @@
AbstractTogglePanel panel = (AbstractTogglePanel) component;
writer.startElement(HtmlConstants.INPUT_ELEM, component);
- writer.writeAttribute(HtmlConstants.TYPE_ATTR, HtmlConstants.INPUT_TYPE_HIDDEN,
null);
- writer.writeAttribute(HtmlConstants.VALUE_ATTRIBUTE, panel.getActiveItem(),
"activeItem");
writer.writeAttribute(HtmlConstants.ID_ATTRIBUTE,
getValueRequestParamName(context, component), null);
writer.writeAttribute(HtmlConstants.NAME_ATTRIBUTE,
getValueRequestParamName(context, component), null);
+ writer.writeAttribute(HtmlConstants.TYPE_ATTR, HtmlConstants.INPUT_TYPE_HIDDEN,
null);
+ writer.writeAttribute(HtmlConstants.VALUE_ATTRIBUTE, panel.getActiveItem(),
null);
writer.endElement(HtmlConstants.INPUT_ELEM);
writeJavaScript(writer, context, component);
Modified:
trunk/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/tabPanel.js
===================================================================
---
trunk/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/tabPanel.js 2011-02-16
17:15:09 UTC (rev 21708)
+++
trunk/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/tabPanel.js 2011-02-16
17:32:02 UTC (rev 21709)
@@ -61,8 +61,15 @@
this.__setActiveItem(newPanel);
- rf.submitForm(this.__getParentForm(newPanel));
+ var params = {};
+ params[newPanel.getTogglePanel().id] = newPanel.name;
+ params[newPanel.id] = newPanel.id;
+
+ $.extend(params, newPanel.getTogglePanel().options["ajax"] || {});
+
+ rf.submitForm(this.__getParentForm(newPanel), params);
+
return false;
},