You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ms...@apache.org on 2010/03/05 17:34:17 UTC
svn commit: r919477 - in /myfaces/trinidad/branches/jsf2_ajax.1:
trinidad-examples/trinidad-demo/src/main/webapp/WEB-INF/
trinidad-examples/trinidad-demo/src/main/webapp/demos/
trinidad-impl/src/main/conf/META-INF/
trinidad-impl/src/main/java/org/apach...
Author: mstarets
Date: Fri Mar 5 16:34:17 2010
New Revision: 919477
URL: http://svn.apache.org/viewvc?rev=919477&view=rev
Log:
Merged in the changes from the old jsf2_ajax branch
Added:
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/demos/ajaxPPRDemos.xhtml (props changed)
- copied unchanged from r919446, myfaces/trinidad/branches/jsf2_ajax/trinidad-examples/trinidad-demo/src/main/webapp/demos/ajaxPPRDemos.xhtml
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextFactoryImpl.java (props changed)
- copied unchanged from r919446, myfaces/trinidad/branches/jsf2_ajax/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextFactoryImpl.java
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextImpl.java (contents, props changed)
- copied, changed from r919446, myfaces/trinidad/branches/jsf2_ajax/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextImpl.java
Modified:
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/WEB-INF/trinidad-config.xml
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/WEB-INF/web.xml
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/conf/META-INF/faces-config-base.xml
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderKit.java
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/ppr/PPRResponseWriter.java
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandLinkRenderer.java
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/DocumentRenderer.java
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/HeadRenderer.java
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js
myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js
Modified: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/WEB-INF/trinidad-config.xml
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/WEB-INF/trinidad-config.xml?rev=919477&r1=919476&r2=919477&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/WEB-INF/trinidad-config.xml (original)
+++ myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/WEB-INF/trinidad-config.xml Fri Mar 5 16:34:17 2010
@@ -19,7 +19,7 @@
-->
<trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
- <debug-output>true</debug-output>
+ <!--debug-output>true</debug-output-->
<!-- Uncomment to switch back to ALERT style client-side validation,
or set to DISABLED to disable it altogether
<client-validation>ALERT</client-validation>
Modified: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/WEB-INF/web.xml?rev=919477&r1=919476&r2=919477&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/WEB-INF/web.xml (original)
+++ myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/WEB-INF/web.xml Fri Mar 5 16:34:17 2010
@@ -67,10 +67,10 @@
<!-- Trinidad by default uses an optimized client-side state saving
mechanism. To disable that, uncomment the following -->
- <!--context-param>
+ <context-param>
<param-name>org.apache.myfaces.trinidad.CLIENT_STATE_METHOD</param-name>
- <param-value>all</param-value>
- </context-param-->
+ <param-value>token</param-value>
+ </context-param>
<!-- When token client-side state saving is enabled, MyFaces Trinidad can apply an additional
optimization by caching an entire UIViewRoot tree with each token.
(Note that this does not affect thread safety or session failover.)
@@ -100,9 +100,8 @@
<context-param>
<param-name>javax.faces.FACELETS_VIEW_MAPPINGS</param-name>
- <param-value>*.xhtml</param-value>
<!-- to run facelets for jspx files comment the line above and uncomment line below-->
- <!--param-value>*.xhtml;*.jspx</param-value-->
+ <param-value>*.xhtml;*.jspx</param-value>
</context-param>
<context-param>
Propchange: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-examples/trinidad-demo/src/main/webapp/demos/ajaxPPRDemos.xhtml
------------------------------------------------------------------------------
svn:eol-style = native
Modified: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/conf/META-INF/faces-config-base.xml
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/conf/META-INF/faces-config-base.xml?rev=919477&r1=919476&r2=919477&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/conf/META-INF/faces-config-base.xml (original)
+++ myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/conf/META-INF/faces-config-base.xml Fri Mar 5 16:34:17 2010
@@ -42,6 +42,9 @@
<view-declaration-language-factory>
org.apache.myfaces.trinidadinternal.application.ViewDeclarationLanguageFactoryImpl
</view-declaration-language-factory>
+ <partial-view-context-factory>
+ org.apache.myfaces.trinidadinternal.context.PartialViewContextFactoryImpl
+ </partial-view-context-factory>
</factory>
<lifecycle>
Propchange: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextFactoryImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextImpl.java (from r919446, myfaces/trinidad/branches/jsf2_ajax/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextImpl.java)
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextImpl.java?p2=myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextImpl.java&p1=myfaces/trinidad/branches/jsf2_ajax/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextImpl.java&r1=919446&r2=919477&rev=919477&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextImpl.java (original)
+++ myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextImpl.java Fri Mar 5 16:34:17 2010
@@ -41,10 +41,10 @@
import javax.faces.event.PhaseId;
import org.apache.myfaces.trinidad.component.UIXComponent;
-import org.apache.myfaces.trinidad.component.visit.VisitCallback;
-import org.apache.myfaces.trinidad.component.visit.VisitContext;
-import org.apache.myfaces.trinidad.component.visit.VisitHint;
-import org.apache.myfaces.trinidad.component.visit.VisitResult;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitHint;
+import javax.faces.component.visit.VisitResult;
import org.apache.myfaces.trinidad.context.PartialPageContext;
import org.apache.myfaces.trinidad.context.RenderingContext;
import org.apache.myfaces.trinidad.context.RequestContext;
Propchange: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/PartialViewContextImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderKit.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderKit.java?rev=919477&r1=919476&r2=919477&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderKit.java (original)
+++ myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/CoreRenderKit.java Fri Mar 5 16:34:17 2010
@@ -143,11 +143,23 @@
return "org.apache.myfaces.trinidad.core.desktop";
}
+ /**
+ * Return <code>true</code> if the request header <code>Faces-Request</code> is present with the
+ * value <code>partial/ajax</code>. Otherwise, return <code>false</code>.
+ *
+ * @param ec the ExternalContext instance.
+ * @return
+ */
static public boolean isAjaxRequest(ExternalContext ec)
{
- return "true".equals(ec.getRequestHeaderMap().get(_PPR_REQUEST_HEADER));
+ return _PARTIAL_AJAX.equals(ec.getRequestHeaderMap().get(_FACES_REQUEST_HEADER));
}
+ /**
+ * TODO: Use JSF2.0 <code>Faces-Request</code> parameter.
+ * @param parameters
+ * @return
+ */
static public boolean isPartialRequest(Map<String, String[]> parameters)
{
String[] array = parameters.get(_PPR_REQUEST_HEADER);
@@ -156,6 +168,11 @@
return "true".equals(array[0]);
}
+ /**
+ * TODO: Use JSF2.0 <code>Faces-Request</code> parameter.
+ * @param ec
+ * @return
+ */
static public boolean isPartialRequest(ExternalContext ec)
{
// A partial request could be an AJAX request, or it could
@@ -803,6 +820,9 @@
static private final String _SCRIPT_LIST_KEY =
"org.apache.myfaces.trinidadinternal.renderkit.ScriptList";
static private final String _PPR_REQUEST_HEADER = "Tr-XHR-Message";
+ private static final String _FACES_REQUEST_HEADER = "Faces-Request";
+ private static final String _PARTIAL_AJAX = "partial/ajax";
+
static private final String _USE_DIALOG_POPUP_INIT_PARAM =
"org.apache.myfaces.trinidad.ENABLE_LIGHTWEIGHT_DIALOGS";
Modified: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/ppr/PPRResponseWriter.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/ppr/PPRResponseWriter.java?rev=919477&r1=919476&r2=919477&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/ppr/PPRResponseWriter.java (original)
+++ myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/ppr/PPRResponseWriter.java Fri Mar 5 16:34:17 2010
@@ -23,11 +23,13 @@
import java.io.Writer;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
+import javax.faces.context.PartialResponseWriter;
import javax.faces.context.ResponseWriter;
import org.apache.myfaces.trinidad.context.PartialPageContext;
@@ -36,6 +38,7 @@
import org.apache.myfaces.trinidad.render.ExtendedRenderKitService;
import org.apache.myfaces.trinidad.util.Service;
+import org.apache.myfaces.trinidadinternal.io.ResponseWriterDecorator;
import org.apache.myfaces.trinidadinternal.renderkit.core.pages.GenericEntry;
/**
@@ -48,7 +51,7 @@
* TODO: write out fragments only once we've detected the
* ID, to avoid sending unnecessary fragments
*/
-public class PPRResponseWriter extends ScriptBufferingResponseWriter
+public class PPRResponseWriter extends ResponseWriterDecorator // ScriptBufferingResponseWriter
{
public PPRResponseWriter(ResponseWriter out,
RenderingContext rc)
@@ -68,7 +71,7 @@
PPRResponseWriter(ResponseWriter out,
PPRResponseWriter base)
{
- super(out, base);
+ super(out);
// New XmlResponseWriter
_xml = new XmlResponseWriter(out, out.getCharacterEncoding());
// But the rest of the state is shared
@@ -116,9 +119,10 @@
// Stick another PI indicating that this is a rich reponse
// Used for an Iframe based communication channel, since it cannot
// read response headers
- _xml.write("<?Tr-XHR-Response-Type ?>\n");
+ // TODO: Do we need this?
+ // _xml.write("<?Tr-XHR-Response-Type ?>\n");
- _xml.startElement("content", null);
+ _xml.startElement(_ELEMENT_PARTIAL_RESPONSE, null);
String viewId = _facesContext.getViewRoot().getViewId();
// HACK: don't write out an "action" for PPR on a GenericEntry page
// (basically entirely for the InlineDatePicker case)
@@ -132,8 +136,9 @@
}
// TODO: Portlet support for PPR?
-
- _xml.writeText(" ", null);
+ // TODO: PS - Not sure why this extra space is being written out, but this causes an 'malformed
+ // XML error to be thrown by JSF 2 Ajax. Commented out the line.
+ // _xml.writeText(" ", null);
_state.documentStarting = false;
}
@@ -141,12 +146,13 @@
public void endDocument() throws IOException
{
// Write out any buffered <script src=""> or inline scripts
- writeBufferedScripts();
+ // TODO: No need to write buffered scripts as we directly let script pass through
+ // writeBufferedScripts();
// Write out all of the framework-level scripts
writeFrameworkScripts();
-
- _xml.endElement("content");
+ _endChanges();
+ _xml.endElement(_ELEMENT_PARTIAL_RESPONSE);
_xml.endDocument();
// Force "inside target mode" - this is for Facelets,
@@ -311,9 +317,49 @@
return _xml;
}
+
+ public void endUpdate() throws IOException
+ {
+ super.flush();
+
+ if (_state._allowedUpdateStarted)
+ {
+ _xml.write("]]>");
+ _xml.endElement(_ELEMENT_CHANGES_UPDATE);
+ _xml.flush();
+ _state._allowedUpdateStarted = false;
+ }
+ }
+
+
+ /**
+ * Starts an update element for non-PPR based content. For e.g., for rendering out the
+ * "javax.faces.ViewState" id.
+ * @param id the id to use for the update element
+ */
+ public void startUpdate(String id) throws IOException
+ {
+ if (id != null && _allowedIds.contains(id))
+ {
+ _startChanges();
+
+ if (!_state._allowedUpdateStarted)
+ {
+ _state._allowedUpdateStarted = true;
+ _xml.startElement(_ELEMENT_CHANGES_UPDATE, null);
+ _xml.writeAttribute(_ATTRIBUTE_ID, id, null);
+ _xml.write("<![CDATA[");
+ _xml.flush();
+ }
+ }
+ }
+
+
/*
* Writes out buffered inline scripts and script libraries
*/
+
+/*
protected void writeBufferedScripts() throws IOException
{
List<String> libraries = getBufferedLibraries();
@@ -332,17 +378,18 @@
{
for (String script : scripts)
{
- _xml.startElement("script", null);
+ _xml.startElement(_ELEMENT_EVAL, null);
_xml.write("<![CDATA[");
_xml.write(script);
_xml.write("]]>");
- _xml.endElement("script");
+ _xml.endElement(_ELEMENT_EVAL);
}
}
// Clear out any buffered scripts/libraries
clearBufferedContents();
}
+*/
/*
* Writes out framework-level scripts
@@ -391,7 +438,7 @@
if (tag != null)
{
super.flush();
- tag.start(_state.pprContext, elementName);
+ tag.startUpdate(_state.pprContext, elementName);
}
_state.componentStack.add(tag);
@@ -405,7 +452,7 @@
componentStack.remove(pos);
if (tag != null)
- tag.finish(_state.pprContext, elementName);
+ tag.finishUpdate(_state.pprContext, elementName);
}
private boolean _isInsideTarget()
@@ -414,7 +461,8 @@
// a partial target subtree. Otherwise, we discard all
// output.
return _state.forceInsideTarget ||
- _state.pprContext.isInsidePartialTarget();
+ _state.pprContext.isInsidePartialTarget() ||
+ _state._allowedUpdateStarted;
}
@@ -468,7 +516,24 @@
}
}
+ private void _startChanges() throws IOException
+ {
+ if (!_state.changesStarted)
+ {
+ _xml.startElement(_ELEMENT_CHANGES, null);
+ _state.changesStarted = true;
+ }
+ }
+ private void _endChanges()
+ throws IOException
+ {
+ if (_state.changesStarted)
+ {
+ _xml.endElement("changes");
+ _state.changesStarted = false;
+ }
+ }
//
// Class representing PPR behavior associated with a tag. The
// base class simply tells PPR when it's working with a partial target
@@ -480,14 +545,16 @@
_id = id;
}
- public void start(
+ public void startUpdate(
PartialPageContextImpl pprContext,
String elementName) throws IOException
{
if (_id != null)
{
+ _startChanges();
pprContext.pushRenderedPartialTarget(_id);
- _xml.startElement("fragment",null);
+ _xml.startElement(_ELEMENT_CHANGES_UPDATE, null);
+ _xml.writeAttribute(_ATTRIBUTE_ID, _id, null);
_xml.write("<![CDATA[");
_xml.flush(); // NEW
@@ -501,7 +568,7 @@
}
}
- public void finish(
+ public void finishUpdate(
PartialPageContextImpl pprContext,
String elementName) throws IOException
{
@@ -520,7 +587,7 @@
PPRResponseWriter.super.flush();
_xml.write("]]>");
- _xml.endElement("fragment");
+ _xml.endElement(_ELEMENT_CHANGES_UPDATE);
_xml.flush();
pprContext.popRenderedPartialTarget();
@@ -567,11 +634,6 @@
private String _id;
}
-
- private State _state;
- private ResponseWriter _xml;
- private final FacesContext _facesContext =
- FacesContext.getCurrentInstance();
static private class State
{
@@ -585,9 +647,22 @@
public int elementDepth;
public boolean documentStarted;
public boolean documentStarting;
+ public boolean changesStarted;
+ private boolean _allowedUpdateStarted;
public final List<PPRTag> componentStack = new ArrayList<PPRTag>(50);
public final PartialPageContextImpl pprContext;
}
+ private State _state;
+ private ResponseWriter _xml;
+ private final FacesContext _facesContext = FacesContext.getCurrentInstance();
+
static private final TrinidadLogger _LOG = TrinidadLogger.createTrinidadLogger(PPRResponseWriter.class);
+ private static final String _ELEMENT_PARTIAL_RESPONSE = "partial-response";
+ private static final String _ELEMENT_CHANGES = "changes";
+ private static final String _ELEMENT_CHANGES_UPDATE = "update";
+ private static final String _ELEMENT_EVAL = "eval";
+ private static final String _ATTRIBUTE_ID = "id";
+ private static final List<String> _allowedIds = Arrays.asList(PartialResponseWriter.VIEW_STATE_MARKER);
+
}
Modified: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandLinkRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandLinkRenderer.java?rev=919477&r1=919476&r2=919477&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandLinkRenderer.java (original)
+++ myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandLinkRenderer.java Fri Mar 5 16:34:17 2010
@@ -77,7 +77,7 @@
Map<String, String> parameterMap =
facesContext.getExternalContext().getRequestParameterMap();
- Object source = parameterMap.get("source");
+ Object source = parameterMap.get("javax.faces.source");
if (clientId == null)
{
clientId = component.getClientId(facesContext);
Modified: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/DocumentRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/DocumentRenderer.java?rev=919477&r1=919476&r2=919477&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/DocumentRenderer.java (original)
+++ myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/DocumentRenderer.java Fri Mar 5 16:34:17 2010
@@ -20,6 +20,7 @@
import java.io.IOException;
+import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
@@ -34,6 +35,7 @@
* <p>
* @version $Name: $ ($Revision: adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/renderkit/core/xhtml/DocumentRenderer.java#0 $) $Date: 10-nov-2005.19:01:25 $
*/
+@ResourceDependency(target = "head", library = "javax.faces", name = "jsf.js")
public class DocumentRenderer extends XhtmlRenderer
{
public DocumentRenderer()
Modified: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/HeadRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/HeadRenderer.java?rev=919477&r1=919476&r2=919477&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/HeadRenderer.java (original)
+++ myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/HeadRenderer.java Fri Mar 5 16:34:17 2010
@@ -20,6 +20,7 @@
import java.io.IOException;
+import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
@@ -36,6 +37,7 @@
* <p>
* @version $Name: $ ($Revision: adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/renderkit/core/xhtml/HeadRenderer.java#0 $) $Date: 10-nov-2005.19:01:29 $
*/
+@ResourceDependency(target = "head", library = "javax.faces", name = "jsf.js")
public class HeadRenderer extends XhtmlRenderer
{
public HeadRenderer()
Modified: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js?rev=919477&r1=919476&r2=919477&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js (original)
+++ myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Core.js Fri Mar 5 16:34:17 2010
@@ -1701,7 +1701,8 @@
form,
doValidate,
parameters,
- isPartial
+ isPartial,
+ event
)
{
// If we've delayed any sort of event submission, we won't want to do it at
@@ -1862,7 +1863,7 @@
}
else
{
- TrPage.getInstance().sendPartialFormPost(form, parameters);
+ TrPage.getInstance().sendPartialFormPost(form, parameters, null, event);
}
}
else
@@ -3636,7 +3637,6 @@
//
function _pprStopBlocking(win)
{
-
// No blocking is performed on Nokia, PPC and BlackBerry devices
if (_agent.isPIE || _agent.isNokiaPhone || _agent.isBlackBerry)
return;
@@ -3868,7 +3868,8 @@
function _submitPartialChange(
form,
doValidate,
- parameters)
+ parameters,
+ event)
{
// If there's no PPR iframe, then just perform a normal,
// full-page submission.
@@ -3886,10 +3887,10 @@
parameters = _addFormParameter(parameters, "partial", "true");
// block all mouse clicks until the submit is done
- _pprStartBlocking(window);
+ _pprStartBlocking(window);
// Submit the form
- var submitted = submitForm(form, doValidate, parameters, true);
+ var submitted = submitForm(form, doValidate, parameters, true, event);
// If the form wasn't actually submitted, update the ref count
if (!submitted)
Modified: myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js?rev=919477&r1=919476&r2=919477&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js (original)
+++ myfaces/trinidad/branches/jsf2_ajax.1/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js Fri Mar 5 16:34:17 2010
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -18,6 +18,9 @@
*/
function TrPage()
{
+ jsf.ajax.addOnError(TrUIUtils.createCallback(this, this._jsfAjaxErrorCallback));
+ jsf.ajax.addOnEvent(TrUIUtils.createCallback(this, this._jsfAjaxCallback));
+
this._loadedLibraries = TrPage._collectLoadedLibraries();
this._requestQueue = new TrRequestQueue(window);
}
@@ -47,17 +50,29 @@
* posts and, for multipart/form posts, IFRAME-based transmission.
* @param actionForm{FormElement} the HTML form to post
* @param params{Object} additional parameters to send
- * @param headerParams{Object} HTTP headers to include (ignored if
+ * @param headerParams{Object} HTTP headers to include (ignored if
* the request must be a multipart/form post)
*/
TrPage.prototype.sendPartialFormPost = function(
actionForm,
params,
- headerParams)
+ headerParams,
+ event)
{
+ var source = "";
+ if (params != null)
+ source = params.source;
+
+ // TODO: move this to the request queue
+ TrPage._delegateToJSFAjax(actionForm, source, event, params);
+
+
+ /** Delegating to jsf.ajax.request(). Do not call the Trinidad PPR request mechanism
+
this.getRequestQueue().sendFormPost(
this, this._requestStatusChanged,
actionForm, params, headerParams);
+ */
}
TrPage.prototype._requestStatusChanged = function(requestEvent)
@@ -65,7 +80,7 @@
if (requestEvent.getStatus() == TrXMLRequestEvent.STATUS_COMPLETE)
{
var statusCode = requestEvent.getResponseStatusCode();
-
+
// The server might not return successfully, for example if an
// exception is thrown. When that happens, a non-200 (OK) status
// code is returned as part of the HTTP prototcol.
@@ -108,7 +123,7 @@
TrPage.prototype._handlePprResponse = function(documentElement)
{
var rootNodeName = TrPage._getNodeName(documentElement);
-
+
if (rootNodeName == "content")
{
// Update the form action
@@ -116,15 +131,15 @@
var childNodes = documentElement.childNodes;
var length = childNodes.length;
-
+
for (var i = 0; i < length; i++)
{
var childNode = childNodes[i];
var childNodeName = TrPage._getNodeName(childNode);
-
+
if (childNodeName == "fragment")
- {
- this._handlePprResponseFragment(childNode);
+ {
+ this._handlePprResponseFragment(childNode);
}
else if (childNodeName == "script")
{
@@ -150,7 +165,7 @@
if (nodeText == null)
nodeText = "Unknown error during PPR";
alert(nodeText);
- }
+ }
else if (rootNodeName == "noop")
{
// No op
@@ -263,7 +278,7 @@
if (eval(trueResetCallback))
doReload = true;
}
-
+
return doReload;
}
@@ -284,11 +299,11 @@
if (action)
{
- var doc = window.document;
+ var doc = window.document;
// Replace the form action used by the next postback
// Particularly important for PageFlowScope which might
- // change value of the pageflow scope token url parameter.
+ // change value of the pageflow scope token url parameter.
// TODO: track submitted form name at client, instead of
// just updating the first form
doc.forms[0].action = action;
@@ -433,14 +448,14 @@
break;
child = parentOfChild;
}
-
+
return false;
}
/**
- * Replaces the a dom element contained in a peer.
- *
+ * Replaces the a dom element contained in a peer.
+ *
* @param newElement{DOMElement} the new dom element
* @param oldElement{DOMElement} the old dom element
*/
@@ -448,8 +463,8 @@
{
oldElement.parentNode.replaceChild(newElement, oldElement);
}
-
-// Extracts the text contents from a rich response fragment node and
+
+// Extracts the text contents from a rich response fragment node and
// creates an HTML element for the first element that is found.
TrPage.prototype._getFirstElementFromFragment = function(fragmentNode)
{
@@ -466,14 +481,14 @@
var outerHTML = cdataNode.data;
// We get our html node by slamming the fragment contents into a div.
- var doc = window.document;
+ var doc = window.document;
var div = doc.createElement("div");
// Slam the new HTML content into the div to create DOM
div.innerHTML = outerHTML;
-
+
return TrPage._getFirstElementWithId(div);
-
+
}
// Returns the first element underneath the specified dom node
@@ -483,7 +498,7 @@
var childNodes = domNode.childNodes;
var length = childNodes.length;
-
+
for (var i = 0; i < length; i++)
{
var childNode = childNodes[i];
@@ -512,7 +527,7 @@
var loadedLibraries = this._loadedLibraries;
if (loadedLibraries[source])
return;
-
+
loadedLibraries[source] = true;
var xmlHttp = new TrXMLRequest();
xmlHttp.setSynchronous(true);
@@ -569,11 +584,11 @@
var textContent = element.innerText;
if (textContent == undefined)
textContent = element.text;
-
+
return textContent;
}
- // Safari doesn't have "innerText", "text" or "textContent" -
+ // Safari doesn't have "innerText", "text" or "textContent" -
// (at least not for XML nodes). So sum up all the text children
if (_agent.isSafari)
{
@@ -666,12 +681,12 @@
// remove the listener/instance combination
var domReplaceListeners = this._domReplaceListeners;
var length = domReplaceListeners.length;
-
+
for (var i = 0; i < length; i++)
{
var currListener = domReplaceListeners[i];
i++;
-
+
if (currListener == listener)
{
var currInstance = domReplaceListeners[i];
@@ -682,17 +697,17 @@
}
}
}
-
+
// remove array, if empty
if (domReplaceListeners.length == 0)
{
this._domReplaceListeners = null;
}
}
-
+
/**
* Adds the styleClassMap entries to the existing internal
- * styleClassMap. Styles can then be accessed via the
+ * styleClassMap. Styles can then be accessed via the
* getStyleClass function.
* @param styleClassMap() {key: styleClass, ...}
*/
@@ -708,7 +723,7 @@
for (var key in styleClassMap)
this._styleClassMap[key] = styleClassMap[key];
}
-
+
/**
* Return the styleClass for the given key.
* @param key(String) Unique key to retrieve the styleClass
@@ -728,7 +743,7 @@
/**
* Causes a partial submit to occur on a given component. The specified
- * component will always be validated first (if appropriate), then optionally
+ * component will always be validated first (if appropriate), then optionally
* the whole form, prior to submission.
* @param formId(String) Id of the form to partial submit.
* @param inputId(String) Id of the element causing the partial submit. If this
@@ -747,8 +762,9 @@
event = window.event;
}
- // If onchange is used for validation, then first validate
+ // If onchange is used for validation, then first validate
// just the current input
+
var isValid = true;
if (_TrEventBasedValidation)
isValid = _validateInput(event, true);
@@ -760,7 +776,169 @@
params = new Object();
params.event = "autosub";
params.source = inputId;
-
- _submitPartialChange(formId, validateForm, params);
+
+ _submitPartialChange(formId, validateForm, params, event);
}
}
+
+/**
+ * Causes a partial submit to occur on a given component using the jsf.ajax.request call. The
+ * specified component will not be validated (yet).
+ * @param formId(String) Id of the form to partial submit.
+ * @param inputId(String) Id of the element causing the partial submit.
+ * @param event(Event) The javascript event object.
+ * @param params(Object} additional parameters to send
+ */
+TrPage._delegateToJSFAjax = function(formId, inputId, event, params)
+{
+ var doc = window.document;
+ var source = _getElementById(doc, inputId);
+
+ if (!params)
+ params = {};
+
+ // TODO: add execute and render targets??
+ jsf.ajax.request(source, event, params);
+}
+
+TrPage.prototype._jsfAjaxCallback = function(data)
+{
+ // TODO: move this code into the request queue to stop this gross infringement
+ // of encapsulation
+ switch (data.status)
+ {
+ case "begin":
+ this._requestQueue._state = TrRequestQueue.STATE_BUSY;
+ this._requestQueue._broadcastStateChangeEvent(this._requestQueue._state);
+ break;
+ case "success":
+ var oldElems = this._ajaxOldDomElements;
+ try
+ {
+ this._notifyDomReplacementListeners(oldElems);
+ }
+ finally
+ {
+ delete this._ajaxOldDomElements;
+ }
+ if (this._activeNode)
+ {
+ var activeNode = this._activeNode;
+ delete this._activeNode;
+ var index = -1;
+ if (activeNode.id)
+ {
+ for (var i = 0, size = oldElems.length; i < size; ++i)
+ {
+ if (TrPage._isDomAncestorOf(activeNode, oldElems[i].element))
+ {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0)
+ {
+ activeNode = document.getElementById(activeNode.id);
+ window._trActiveElement = activeNode;
+ if (activeNode)
+ {
+ activeNode.focus();
+ }
+ }
+ }
+ }
+ this._requestQueue._state = TrRequestQueue.STATE_READY;
+ this._requestQueue._broadcastStateChangeEvent(this._requestQueue._state);
+ break;
+ case "complete": default:
+ _pprStopBlocking(window);
+ // Collect the DOM elements that will be replaced to be able to fire the
+ // DOM replacement events
+ this._ajaxOldDomElements = this._getDomToBeUpdated(data.responseCode, data.responseXML);
+ this._activeNode = _getActiveElement();
+ break;
+ }
+}
+
+TrPage.prototype._jsfAjaxErrorCallback = function(data)
+{
+ // TODO: move this code into the request queue to stop this gross infringement
+ // of encapsulation
+ this._requestQueue._state = TrRequestQueue.STATE_READY;
+ this._requestQueue._broadcastStateChangeEvent(this._requestQueue._state);
+ delete this._ajaxOldDomElements;
+ delete this._activeNode;
+}
+
+TrPage.prototype._notifyDomReplacementListeners = function(dataArray)
+{
+ var listeners = this._domReplaceListeners;
+ if (!listeners || listeners.length == 0)
+ {
+ return;
+ }
+ for (var i = 0, isize = dataArray.length; i < isize; ++i)
+ {
+ var oldElem = dataArray[i].element;
+ var id = dataArray[i].id;
+ var newElem = id == null ? document.body : document.getElementById(id);
+ for (var j = 0, jsize = listeners.length; j < jsize; ++j)
+ {
+ var currListener = listeners[j];
+ var currInstance = listeners[++j];
+ if (currInstance != null)
+ {
+ currListener.call(currInstance, oldElem, newElem);
+ }
+ else
+ {
+ currListener(oldElem, newElem);
+ }
+ }
+ }
+}
+
+TrPage.prototype._getDomToBeUpdated = function(status, responseXML)
+{
+ // check for a successful request
+ if (status < 200 || status >= 300)
+ {
+ return null;
+ }
+ // see if the response contains changes (not a redirect for example)
+ var nodes = responseXML.getElementsByTagName("partial-response");
+ var responseTypeNode = nodes.length ? nodes[0].firstChild : null;
+ if (!responseTypeNode || responseTypeNode.nodeName !== "changes")
+ {
+ return null;
+ }
+
+ var changeNodes = responseTypeNode.childNodes;
+ var oldElements = [];
+ for (var i = 0, size = changeNodes.length; i < size; ++i)
+ {
+ var node = changeNodes[i];
+ if (node.nodeName !== "update")
+ {
+ // We only care about updates as that is what Trinidad supported for the DOM
+ // replacement notification API
+ continue;
+ }
+
+ var id = node.getAttribute("id");
+ if (id == "javax.faces.ViewState")
+ {
+ continue;
+ }
+ if (id == "javax.faces.ViewRoot" || id == "javax.faces.ViewBody")
+ {
+ oldElements.push({ "id": null, "element": document.body });
+ }
+ else
+ {
+ oldElements.push({ "id": id, "element": document.getElementById(id) });
+ }
+ }
+
+ return oldElements;
+}
\ No newline at end of file