You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/01/12 04:32:53 UTC
svn commit: r898169 - in
/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html:
HtmlButtonRendererBase.java HtmlLinkRendererBase.java HtmlRendererUtils.java
Author: lu4242
Date: Tue Jan 12 03:32:53 2010
New Revision: 898169
URL: http://svn.apache.org/viewvc?rev=898169&view=rev
Log:
MYFACES-2477 Ajax related fixes for command components (Thanks to Michael Kurz for this patch)
Modified:
myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java
myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java
myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java
Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java?rev=898169&r1=898168&r2=898169&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java Tue Jan 12 03:32:53 2010
@@ -90,7 +90,9 @@
{
String clientId = uiComponent.getClientId(facesContext);
Map paramMap = facesContext.getExternalContext().getRequestParameterMap();
- return paramMap.containsKey(clientId) || paramMap.containsKey(clientId + IMAGE_BUTTON_SUFFIX_X) || paramMap.containsKey(clientId + IMAGE_BUTTON_SUFFIX_Y);
+ return paramMap.containsKey(clientId) || paramMap.containsKey(clientId + IMAGE_BUTTON_SUFFIX_X)
+ || paramMap.containsKey(clientId + IMAGE_BUTTON_SUFFIX_Y)
+ || HtmlRendererUtils.isPartialOrBehaviorSubmit(facesContext, clientId);
}
public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java?rev=898169&r1=898168&r2=898169&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java Tue Jan 12 03:32:53 2010
@@ -32,6 +32,7 @@
import javax.faces.component.UIOutput;
import javax.faces.component.UIParameter;
import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorHint;
import javax.faces.component.behavior.ClientBehaviorHolder;
import javax.faces.component.html.HtmlCommandLink;
import javax.faces.component.html.HtmlOutputLink;
@@ -80,8 +81,8 @@
{
String reqValue = (String) facesContext.getExternalContext().getRequestParameterMap().get(
HtmlRendererUtils.getHiddenCommandLinkFieldName(formInfo));
- if (reqValue != null && reqValue.equals(clientId))
- {
+ if (reqValue != null && reqValue.equals(clientId)
+ || HtmlRendererUtils.isPartialOrBehaviorSubmit(facesContext, clientId)) {
component.queueEvent(new ActionEvent(component));
RendererUtils.initPartialValidationAndModelUpdate(component, facesContext);
@@ -395,10 +396,12 @@
}
else
{
+ boolean hasSubmittingBehavior = hasSubmittingBehavior(behaviors, ClientBehaviorEvents.CLICK)
+ || hasSubmittingBehavior(behaviors, ClientBehaviorEvents.ACTION);
//render a javascript that chain the related code
onclick = HtmlRendererUtils.buildBehaviorChain(facesContext, component, behaviors,
ClientBehaviorEvents.CLICK, ClientBehaviorEvents.ACTION,
- commandOnclick , serverEventCode,
+ commandOnclick , hasSubmittingBehavior ? null : serverEventCode,
HtmlRendererUtils.mapAttachedParamsToStringValues(facesContext, component));
}
@@ -407,6 +410,19 @@
writer.writeAttribute(HTML.ONCLICK_ATTR, onclick, null);
}
+ private boolean hasSubmittingBehavior(Map<String, List<ClientBehavior>> clientBehaviors, String eventName)
+ {
+ List<ClientBehavior> eventBehaviors = clientBehaviors.get(eventName);
+ if (eventBehaviors != null && !eventBehaviors.isEmpty()) {
+ for (ClientBehavior behavior : eventBehaviors) {
+ if (behavior.getHints().contains(ClientBehaviorHint.SUBMITTING)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
protected String buildServerOnclick(FacesContext facesContext, UIComponent component,
String clientId, FormInfo formInfo) throws IOException
{
@@ -869,5 +885,5 @@
writer.writeText("", null);
writer.endElement(HTML.ANCHOR_ELEM);
}
- }
+ }
}
Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java?rev=898169&r1=898168&r2=898169&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java Tue Jan 12 03:32:53 2010
@@ -1778,6 +1778,25 @@
+ HIDDEN_COMMANDLINK_FIELD_NAME;
}
+ public static boolean isPartialOrBehaviorSubmit(FacesContext facesContext, String clientId)
+ {
+ Map<String, String> params = facesContext.getExternalContext().getRequestParameterMap();
+
+ String sourceId = params.get("javax.faces.source");
+ if (sourceId == null || !sourceId.equals(clientId)) {
+ return false;
+ }
+ String behaviorEvent = params.get("javax.faces.behavior.event");
+ if (behaviorEvent != null) {
+ return ClientBehaviorEvents.ACTION.equals(behaviorEvent);
+ }
+ String partialEvent = params.get("javax.faces.partial.event");
+ if (partialEvent != null) {
+ return ClientBehaviorEvents.CLICK.equals(partialEvent);
+ }
+ return false;
+ }
+
/**
*
* @param formInfo
@@ -2014,12 +2033,12 @@
}
/**
- * checks if the given component has behaviors attachements
+ * Checks if the given component has a behavior attachment with a given name.
*
* @since 4.0.0
* @param eventName the event name to be checked for
- * @param uiComponent the component which possibly has attached client behaviors
- * @return true if client behaviors are attached, false otherwise
+ * @param behaviors map of behaviors attached to the component
+ * @return true if client behavior with given name is attached, false otherwise
*/
public static boolean hasClientBehavior(String eventName,
Map<String, List<ClientBehavior>> behaviors,
@@ -2216,7 +2235,7 @@
List<String> finalParams = new ArrayList<String>(3);
if (userEventCode != null && !userEventCode.trim().equals(STR_EMPTY))
{
- finalParams.add('\''+userEventCode+'\'');
+ finalParams.add('\'' + StringUtils.replace(userEventCode, '\'', "\\'") + '\'');
}
final MyfacesConfig currentInstance = MyfacesConfig
@@ -2237,7 +2256,7 @@
if (serverEventCode != null
&& !serverEventCode.trim().equals(STR_EMPTY))
{
- finalParams.add('\''+serverEventCode+'\'');
+ finalParams.add('\'' + StringUtils.replace(serverEventCode, '\'', "\\'") + '\'');
}
Iterator<String> it = finalParams.iterator();