You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by aw...@apache.org on 2007/08/14 17:47:53 UTC
svn commit: r565814 - in
/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main:
java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/
javascript/META-INF/adf/jsLibs/
Author: awiner
Date: Tue Aug 14 08:47:52 2007
New Revision: 565814
URL: http://svn.apache.org/viewvc?view=rev&rev=565814
Log:
Step 2 of TRINIDAD-96: Validators should be added incrementally, not set as a whole
- Instead of setting reset calls as an array, add them as a clientId->JS call map
- Make the shuttle reset call a no-op if that shuttle has been removed
Modified:
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CoreFormData.java
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/FormRenderer.java
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SelectManyShuttleRenderer.java
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Shuttle.js
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CoreFormData.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CoreFormData.java?view=diff&rev=565814&r1=565813&r2=565814
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CoreFormData.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CoreFormData.java Tue Aug 14 08:47:52 2007
@@ -39,10 +39,10 @@
import org.apache.myfaces.trinidad.context.RenderingContext;
import org.apache.myfaces.trinidad.convert.ClientConverter;
import org.apache.myfaces.trinidad.logging.TrinidadLogger;
+import org.apache.myfaces.trinidad.util.FastMessageFormat;
import org.apache.myfaces.trinidad.util.MessageFactory;
import org.apache.myfaces.trinidad.validator.ClientValidator;
import org.apache.myfaces.trinidadinternal.share.data.ServletRequestParameters;
-import org.apache.myfaces.trinidadinternal.share.util.FastMessageFormat;
/**
* Implementation of FormData from the CoreRenderKit (or,
@@ -156,28 +156,29 @@
* "eval(call)" will be called on the client when resetting.
*/
public void addResetCall(
+ String clientId,
String call
)
{
if (call != null)
{
- List<String> resetCalls = getResetCalls(true);
+ Map<String, String> resetCalls = getResetCalls(true);
// add the call
- resetCalls.add(call);
+ resetCalls.put(clientId, call);
}
}
- public List<String> getResetCalls(
+ public Map<String, String> getResetCalls(
boolean createIfNecessary
)
{
if (_resetCallsList == null && createIfNecessary)
{
- _resetCallsList = new ArrayList<String>();
+ _resetCallsList = new HashMap<String, String>();
}
return _resetCallsList;
@@ -763,8 +764,8 @@
// on the component
private Map<String, String> _labelMap = null;
- // List of reset calls
- private List<String> _resetCallsList = null;
+ // Map of reset calls
+ private Map<String, String> _resetCallsList = null;
private String _formName = null;
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/FormRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/FormRenderer.java?view=diff&rev=565814&r1=565813&r2=565814
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/FormRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/FormRenderer.java Tue Aug 14 08:47:52 2007
@@ -381,10 +381,10 @@
// Write the array of reset calls
//
CoreFormData fData = (CoreFormData) arc.getFormData();
- List<String> resetCallList = fData.getResetCalls(false);
+ Map<String, String> resetCallMap = fData.getResetCalls(false);
- int resetCallCount = (resetCallList != null)
- ? resetCallList.size()
+ int resetCallCount = (resetCallMap != null)
+ ? resetCallMap.size()
: 0;
if (resetCallCount != 0)
@@ -397,16 +397,15 @@
// Bug #3426092:
// render the type="text/javascript" attribute in accessibility mode
renderScriptTypeAttribute(context, arc);
-
- writer.write("var _");
- writer.write(jsID);
- writer.write("_Reset=[");
-
+ writer.writeText("TrPage.getInstance()._addResetCalls('", null);
+ writer.writeText(fData.getName(), null);
+ writer.writeText("',{", null);
boolean firstCall = true;
- for (int i = 0; i < resetCallCount; i++)
+ for (Map.Entry<String, String> entry : resetCallMap.entrySet())
{
- String currCall = resetCallList.get(i);
+ String clientId = entry.getKey();
+ String currCall = entry.getValue();
if (firstCall)
{
@@ -415,18 +414,20 @@
else
{
// write the separator every time except the first time
- writer.write(",");
+ writer.writeText(",", null);
}
// write the error format
// use single quotes since embedded single quotes
// are automatically escaped
- writer.write("\'");
- writer.write(XhtmlUtils.escapeJS(currCall));
- writer.write("\'");
+ writer.writeText("'", null);
+ writer.writeText(clientId, null);
+ writer.writeText("':'", null);
+ writer.writeText(XhtmlUtils.escapeJS(currCall), null);
+ writer.writeText("'", null);
}
- writer.write("];");
+ writer.writeText("});", null);
writer.endElement("script");
}
@@ -833,12 +834,13 @@
* "eval(call)" will be called on the client when resetting.
*/
public static void addResetCall(
+ String clientId,
String call
)
{
CoreFormData fData = (CoreFormData)
RenderingContext.getCurrentInstance().getFormData();
- fData.addResetCall(call);
+ fData.addResetCall(clientId, call);
}
public static void addOnSubmitConverterValidators(
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SelectManyShuttleRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SelectManyShuttleRenderer.java?view=diff&rev=565814&r1=565813&r2=565814
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SelectManyShuttleRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/SelectManyShuttleRenderer.java Tue Aug 14 08:47:52 2007
@@ -386,17 +386,17 @@
// Get JS-valid identifiers for ourselves
String formName = XhtmlUtils.getJSIdentifier(rc.getFormData().getName());
- clientId = XhtmlUtils.getJSIdentifier(clientId);
+ String jsClientId = XhtmlUtils.getJSIdentifier(clientId);
// Add the reset call to the form as a whole
StringBuilder funcCallBuffer = new StringBuilder(
19 +
formName.length() +
- clientId.length());
+ jsClientId.length());
- funcCallBuffer.append("TrShuttleProxy._resetItems('").append(clientId);
+ funcCallBuffer.append("TrShuttleProxy._resetItems('").append(jsClientId);
funcCallBuffer.append("','").append(formName).append("');");
- FormRenderer.addResetCall(funcCallBuffer.toString());
+ FormRenderer.addResetCall(clientId, funcCallBuffer.toString());
ResponseWriter rw = context.getResponseWriter();
// And write out the "orig" script that retains knowledge of
@@ -404,9 +404,9 @@
rw.writeText( "window[\"_", null);
rw.writeText(formName, null);
rw.writeText("_", null);
- rw.writeText(clientId, null);
+ rw.writeText(jsClientId, null);
rw.writeText("_orig\"]=TrShuttleProxy._copyLists('", null);
- rw.writeText(clientId, null);
+ rw.writeText(jsClientId, null);
rw.writeText("','", null);
rw.writeText(formName, null);
rw.writeText("');", null);
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js?view=diff&rev=565814&r1=565813&r2=565814
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js Tue Aug 14 08:47:52 2007
@@ -2009,20 +2009,7 @@
if (!form)
return false;
- var resetCallbacks= window[ "_" + _getJavascriptId(form.name) + "_Reset"];
-
- if (resetCallbacks && !doReload)
- {
- for (var i = 0; i < resetCallbacks.length; i++)
- {
- var trueResetCallback = unescape(resetCallbacks[i]);
-
- doReload = (eval(trueResetCallback));
-
- }
- }
-
-
+ var doReload = TrPage.getInstance()._resetForm(form);
if ( doReload )
{
window.document.location.reload();
@@ -2031,6 +2018,7 @@
{
form.reset();
}
+
_lastDateReset = new Date();
return doReload;
}
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js?view=diff&rev=565814&r1=565813&r2=565814
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js Tue Aug 14 08:47:52 2007
@@ -159,6 +159,55 @@
}
}
+TrPage.prototype._addResetCalls = function(
+ formName,
+ callMap)
+{
+ var resetCalls = this._resetCalls;
+ if (!resetCalls)
+ {
+ resetCalls = new Object();
+ this._resetCalls = resetCalls;
+ }
+
+ var formReset = resetCalls[formName];
+ if (!formReset)
+ {
+ formReset = new Object();
+ resetCalls[formName] = formReset;
+ }
+
+ for (var k in callMap)
+ {
+ formReset[k] = callMap[k];
+ }
+}
+
+/**
+ * Callback used by Core.js resetForm() function
+ * TODO: remove entire Core.js code, move to public TrPage.resetForm()
+ * call.
+ */
+TrPage.prototype._resetForm = function(form)
+{
+ var resetCalls = this._resetCalls;
+ if (!resetCalls)
+ return false;
+ var formReset = resetCalls[form.getAttribute("name")];
+ if (!formReset)
+ return false;
+
+ var doReload = false;
+ for (var k in formReset)
+ {
+ var trueResetCallback = unescape(formReset[k]);
+ if (eval(trueResetCallback))
+ doReload = true;
+ }
+
+ return doReload;
+}
+
// TODO move to agent code
TrPage._getNodeName = function(element)
{
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Shuttle.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Shuttle.js?view=diff&rev=565814&r1=565813&r2=565814
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Shuttle.js (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Shuttle.js Tue Aug 14 08:47:52 2007
@@ -1364,25 +1364,17 @@
shuttleName,
formName)
{
-
- //get the formName if needed
- if(formName == (void 0))
- {
- formName = TrShuttleProxy._findFormNameContaining(from);
- }
-
- if(formName.length == 0)
- {
- alert(shuttle_no_form_available);
- return;
- }
-
// get list names
leadingListName = TrShuttleProxy._getListName( shuttleName, true);
trailingListName = TrShuttleProxy._getListName( shuttleName, false);
// get current lists
var leadingList = document.forms[formName].elements[leadingListName];
+ // Defensive: reset calls are left attached to the page even after
+ // the element has been removed. So if the list is not found, just bail
+ if (!leadingList)
+ return;
+
var trailingList = document.forms[formName].elements[trailingListName];
// get original lists
@@ -1513,19 +1505,6 @@
*/
TrShuttleProxy._copyLists = function( shuttleName, formName )
{
-
- //get the formName if needed
- if(formName == (void 0))
- {
- formName = TrShuttleProxy._findFormNameContaining(from);
- }
-
- if(formName.length == 0)
- {
- alert(shuttle_no_form_available);
- return;
- }
-
var origLists = new Object();
origLists.leading = TrShuttleProxy._copyList( TrShuttleProxy._getListName( shuttleName, true), formName);
origLists.trailing = TrShuttleProxy._copyList( TrShuttleProxy._getListName( shuttleName, false), formName);