Author: F.antonov
Date: 2007-03-29 10:26:24 -0400 (Thu, 29 Mar 2007)
New Revision: 207
Modified:
trunk/richfaces/menu-components/src/main/java/org/richfaces/renderkit/html/MenuItemRendererBase.java
Log:
MenuItem component development.
Modified:
trunk/richfaces/menu-components/src/main/java/org/richfaces/renderkit/html/MenuItemRendererBase.java
===================================================================
---
trunk/richfaces/menu-components/src/main/java/org/richfaces/renderkit/html/MenuItemRendererBase.java 2007-03-29
14:25:44 UTC (rev 206)
+++
trunk/richfaces/menu-components/src/main/java/org/richfaces/renderkit/html/MenuItemRendererBase.java 2007-03-29
14:26:24 UTC (rev 207)
@@ -22,10 +22,13 @@
package org.richfaces.renderkit.html;
import java.io.IOException;
+import java.util.Map;
import javax.faces.component.UIComponent;
-import javax.faces.component.UIForm;
+import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.PhaseId;
import org.ajax4jsf.framework.renderer.AjaxRendererUtils;
import org.ajax4jsf.framework.renderer.ComponentVariables;
@@ -34,12 +37,13 @@
import org.richfaces.component.UIMenuItem;
import org.richfaces.component.util.ViewUtil;
import org.richfaces.renderkit.CompositeRenderer;
+import org.ajax4jsf.framework.util.command.CommandScriptBuilder;
public class MenuItemRendererBase extends CompositeRenderer {
- private static RendererUtils rendererUtils = new RendererUtils();
+// private static RendererUtils rendererUtils = new RendererUtils();
protected Class getComponentClass() {
return UIMenuItem.class;
@@ -49,6 +53,37 @@
return true;
}
+ public void doDecode(FacesContext context, UIComponent component) {
+
+ super.doDecode(context, component);
+
+ ExternalContext exCtx = context.getExternalContext();
+ Map rqMap = exCtx.getRequestParameterMap();
+ Object clnId = rqMap.get(component.getClientId(context));
+ if(clnId == null) {
+ clnId = rqMap.get(component.getClientId(context) + ":hidden");
+ }
+ UIMenuItem menuItem = (UIMenuItem)component;
+ if(clnId!=null) {
+
+ // enqueue event here for this component or for component with Id
+ // taken from forId attribute
+
+ String mode = menuItem.getMode();
+ if (!UIMenuItem.MODE_NONE.equalsIgnoreCase(mode)) {
+
+ ActionEvent actionEvent = new ActionEvent(menuItem);
+ if (menuItem.isImmediate()) {
+ actionEvent.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
+ } else {
+ actionEvent.setPhaseId(PhaseId.INVOKE_APPLICATION);
+ }
+ menuItem.queueEvent(actionEvent);
+ }
+ }
+ }
+
+
public void initializeResources(FacesContext context, UIMenuItem menuItem)
throws IOException {
ComponentVariables variables = ComponentsVariableResolver.getVariables(this,
menuItem);
@@ -77,21 +112,22 @@
StringBuffer scriptValue = new StringBuffer();
scriptValue.append("this.className='dr-menu-item dr-menu-item-enabled
rich-menu-item rich-menu-item-enabled ")
.append(getStringAttributeOrEmptyString(menuItem, "styleClass") +
"'; ");
- if (null == getIconFacet(menuItem)) {
+ //if (null == getIconFacet(menuItem)) {
scriptValue.append("document.getElementById('" +
menuItem.getClientId(context) + ":icon').className='dr-menu-icon
rich-menu-item-icon ")
.append(getStringAttributeOrEmptyString(menuItem, "iconClass") +
"'; ");
- }
+ //}
scriptValue.append("document.getElementById('" +
menuItem.getClientId(context) + ":anchor').className='dr-menu-label
rich-menu-item-label'; ")
.append(getStringAttributeOrEmptyString(menuItem, "onmouseout"));
variables.setVariable("onmouseout", scriptValue);
scriptValue = new StringBuffer();
scriptValue.append("this.className='dr-menu-item dr-menu-item-hover
rich-menu-item rich-menu-item-hover ")
- .append(getStringAttributeOrEmptyString(menuItem, "styleClass") +
"'; ");
- if (null == getIconFacet(menuItem)) {
+ .append(getStringAttributeOrEmptyString(menuItem, "styleClass") + "
")
+ .append(getStringAttributeOrEmptyString(menuItem, "selectClass") +
"'; ");
+ //if (null == getIconFacet(menuItem)) {
scriptValue.append("document.getElementById('" +
menuItem.getClientId(context) + ":icon').className='dr-menu-icon
dr-menu-icon-selected rich-menu-item-icon rich-menu-item-icon-selected ")
.append(getStringAttributeOrEmptyString(menuItem, "iconClass") +
"'; ");
- }
+ //}
scriptValue.append("document.getElementById('" +
menuItem.getClientId(context) + ":anchor').className='dr-menu-label
dr-menu-label-selected rich-menu-item-label rich-menu-item-label-selected'; ")
.append(getStringAttributeOrEmptyString(menuItem, "onmouseout"));
variables.setVariable("onmouseover", scriptValue);
@@ -109,21 +145,25 @@
variables.setVariable("labelClass", resource);
resource = null;
- String mode = menuItem.getMode();
- StringBuffer onClick = new StringBuffer();
+ String mode = resolveSubmitMode(menuItem);
if (mode.equalsIgnoreCase(UIMenuItem.MODE_AJAX)) {
- onClick.append(AjaxRendererUtils.buildOnClick(menuItem, context));
- //resource = "alert('Ajax submit mode');";
+ resource = AjaxRendererUtils.buildOnClick(menuItem, context).toString();
} else if (mode.equalsIgnoreCase(UIMenuItem.MODE_SERVER)) {
- UIForm form= rendererUtils.getNestingForm(context, menuItem);
- //resource = "document.getElementById('" + form.getId() +
"').submit();";
- onClick.append("document.getElementById('" + form.getId() +
"').submit();");
+ CommandScriptBuilder builder = new CommandScriptBuilder(menuItem);
+ builder.setCheckActionAndListener(true);
+ Object target = menuItem.getAttributes().get("target");
+ if (null != target) {
+ builder.setTarget((String) target);
+ }
+ builder.setUseOriginalOnclick(true);
+ builder.addCodeBefore("Event.stop(event || window.event);");
+ //builder.addCodeAfter("Exadel.Menu.Layers.shutdown();return false;");
+ String id = menuItem.getClientId(context);// + ":submit";
+ builder.addParameter(id + ":hidden", id);
+ resource = builder.toString();
}
- //if (resource != null) {
- // variables.setVariable("onclick", resource);
- //}
- if (onClick.length() > 0) {
- variables.setVariable("onclick", onClick.toString());
+ if (resource != null) {
+ variables.setVariable("onclick", resource);
}
}
}
@@ -147,5 +187,21 @@
}
return iconFacet;
}
-
+
+ private String resolveSubmitMode(UIMenuItem menuItem) {
+ String submitMode = menuItem.getMode();
+ if (null != submitMode) {
+ return submitMode;
+ }
+ UIComponent parent = menuItem.getParent();
+ while (null != parent) {
+ submitMode = (String) parent.getAttributes().get("mode");
+ if (null != submitMode) {
+ return submitMode;
+ }
+ parent = parent.getParent();
+ }
+ return UIMenuItem.MODE_SERVER;
+ }
+
}
Show replies by date