You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ck...@apache.org on 2006/08/22 22:56:01 UTC
svn commit: r433750 - in /myfaces/tomahawk/trunk/sandbox:
core/src/main/java/org/apache/myfaces/custom/ppr/
core/src/main/resources-facesconfig/META-INF/
core/src/main/resources/org/apache/myfaces/custom/ppr/
core/src/main/resources/org/apache/myfaces/...
Author: ckormos
Date: Tue Aug 22 13:56:00 2006
New Revision: 433750
URL: http://svn.apache.org/viewvc?rev=433750&view=rev
Log:
Initial commit for PPR provided by Ernst Fastl.
Added:
myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/
myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroup.java
myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupRenderer.java
myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupTag.java
myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPhaseListener.java
myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/
myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/
myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/ppr.js
myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/ppr/
myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/ppr/PPRExampleBean.java
myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/pprPanelGroup.jsp
Modified:
myfaces/tomahawk/trunk/sandbox/core/src/main/resources-facesconfig/META-INF/faces-config.xml
myfaces/tomahawk/trunk/sandbox/core/src/main/tld/myfaces_sandbox.tld
myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/examples-config.xml
myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/home.jsp
Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroup.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroup.java?rev=433750&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroup.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroup.java Tue Aug 22 13:56:00 2006
@@ -0,0 +1,60 @@
+package org.apache.myfaces.custom.ppr;
+
+import org.apache.myfaces.component.html.ext.HtmlPanelGroup;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: Ernst
+ * Date: 20.06.2006
+ * Time: 03:30:13
+ * To change this template use File | Settings | File Templates.
+ */
+public class PPRPanelGroup extends HtmlPanelGroup
+{
+ private String _partialTriggers;
+
+ public static final String COMPONENT_TYPE = "org.apache.myfaces.PPRPanelGroup";
+
+ public static final String COMPONENT_FAMILY = "org.apache.myfaces.PPRPanelGroup";
+
+ public static final String DEFAULT_RENDERER_TYPE = "org.apache.myfaces.PPRPanelGroup";
+
+ public PPRPanelGroup()
+ {
+ setRendererType(DEFAULT_RENDERER_TYPE);
+ }
+
+ public String getFamily()
+ {
+ return COMPONENT_FAMILY;
+ }
+
+ public String getPartialTriggers()
+ {
+ return _partialTriggers;
+ }
+
+ public void setPartialTriggers(String partialTriggers)
+ {
+ this._partialTriggers = partialTriggers;
+ }
+
+ public void restoreState(FacesContext context, Object state)
+ {
+
+ Object[] values = (Object[]) state;
+ super.restoreState(context, values[0]);
+ _partialTriggers = (String) values[1];
+
+ }
+
+ public Object saveState(FacesContext context)
+ {
+ Object[] values = new Object[2];
+ values[0] = super.saveState(context);
+ values[1] = _partialTriggers;
+ return values;
+ }
+}
Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupRenderer.java?rev=433750&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupRenderer.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupRenderer.java Tue Aug 22 13:56:00 2006
@@ -0,0 +1,131 @@
+package org.apache.myfaces.custom.ppr;
+
+import org.apache.myfaces.renderkit.html.ext.HtmlGroupRenderer;
+import org.apache.myfaces.renderkit.html.util.AddResource;
+import org.apache.myfaces.renderkit.html.util.AddResourceFactory;
+import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
+import org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr;
+import org.apache.myfaces.custom.dojo.DojoUtils;
+import org.apache.myfaces.custom.dojo.DojoConfig;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.component.UIComponent;
+import javax.servlet.http.HttpServletRequest;
+
+import java.io.IOException;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeSet;
+
+public class PPRPanelGroupRenderer extends HtmlGroupRenderer
+{
+ private static Log log = LogFactory.getLog(PPRPanelGroupRenderer.class);
+ private static final String MY_FACES_PPR_INITIALIZED = "/*MyFaces PPR initialized*/";
+ private static final String ADD_PARTIAL_TRIGGER_FUNCTION = "myFacesPPRCtrl.addPartialTrigger";
+ private static final String PPR_JS_FILE = "ppr.js";
+ private static final String BODY_SCRIPT_INFOS_ATTRIBUTE_NAME = "bodyScriptInfos";
+ private static final String MY_FACES_PPR_INIT_CODE =
+ "var myFacesPPRCtrl = new org.apache.myfaces.PPRCtrl(\"mainform\");";
+
+ public void encodeJavaScript(FacesContext facesContext, UIComponent uiComponent) throws IOException
+ {
+ if (!isInlineScriptSet(facesContext, MY_FACES_PPR_INITIALIZED)) {
+ String javascriptLocation = (String)uiComponent.getAttributes().get(JSFAttr.JAVASCRIPT_LOCATION);
+ AddResource addResource = AddResourceFactory.getInstance(facesContext);
+ DojoUtils.addMainInclude(facesContext, uiComponent, javascriptLocation, new DojoConfig());
+ DojoUtils.addRequire(facesContext, uiComponent, "dojo.io.*");
+ DojoUtils.addRequire(facesContext, uiComponent, "dojo.event.*");
+ addResource.addInlineScriptAtPosition(facesContext, AddResource.HEADER_BEGIN, MY_FACES_PPR_INITIALIZED);
+
+ addResource.addJavaScriptAtPosition(facesContext,
+ AddResource.HEADER_BEGIN,
+ PPRPanelGroup.class,
+ PPR_JS_FILE);
+
+ writeInlineScript(facesContext,uiComponent,MY_FACES_PPR_INIT_CODE);
+ }
+ String partialTriggerId=null;
+ String partialTriggerClientId=null;
+ UIComponent partialTriggerComponent=null;
+ String partialTriggers = ((PPRPanelGroup)uiComponent).getPartialTriggers();
+ String clientId = uiComponent.getClientId(facesContext);
+ StringTokenizer st = new StringTokenizer(partialTriggers, ",; ", false);
+ while (st.hasMoreTokens())
+ {
+ partialTriggerId = st.nextToken();
+ partialTriggerComponent = facesContext.getViewRoot().findComponent(partialTriggerId);
+ if(partialTriggerComponent != null)
+ {
+ partialTriggerClientId = partialTriggerComponent.getClientId(facesContext);
+ writeInlineScript(facesContext,uiComponent,
+ ADD_PARTIAL_TRIGGER_FUNCTION +
+ "('" +
+ partialTriggerClientId +
+ "','" +
+ clientId +
+ "');");
+ }
+ else
+ {
+ log.debug("PPRPanelGroupRenderer Component with id " + partialTriggerId + " not found!");
+ }
+ }
+
+ }
+
+ public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException
+ {
+ super.encodeEnd(facesContext, uiComponent);
+ if(uiComponent instanceof PPRPanelGroup){
+ if(((PPRPanelGroup)uiComponent).getPartialTriggers()!=null &&
+ ((PPRPanelGroup)uiComponent).getPartialTriggers().length()>0)
+ {
+ encodeJavaScript(facesContext, uiComponent);
+ }
+ }
+ }
+
+ /**
+ * helper to write an inline javascript at the
+ * exact resource location of the call
+ * @param facesContext
+ * @param component
+ * @param script
+ * @throws IOException
+ */
+ private static void writeInlineScript(FacesContext facesContext, UIComponent component, String script) throws IOException {
+ ResponseWriter writer = facesContext.getResponseWriter();
+ writer.startElement(HTML.SCRIPT_ELEM, component);
+ writer.writeAttribute(HTML.TYPE_ATTR, HTML.SCRIPT_TYPE_TEXT_JAVASCRIPT, null);
+ writer.write(script);
+ writer.endElement(HTML.SCRIPT_ELEM);
+ }
+
+ public static boolean isInlineScriptSet(FacesContext context, String inlineScript) {
+ HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
+ Set set = getBodyScriptInfos(request);
+
+ if (!set.contains(inlineScript)) {
+ set.add(inlineScript);
+
+ return false;
+ }
+
+ return true;
+ }
+
+ private static Set getBodyScriptInfos(HttpServletRequest request) {
+ Set set = (Set) request.getAttribute(BODY_SCRIPT_INFOS_ATTRIBUTE_NAME);
+
+ if (set == null) {
+ set = new TreeSet();
+ request.setAttribute(BODY_SCRIPT_INFOS_ATTRIBUTE_NAME, set);
+ }
+
+ return set;
+ }
+
+}
Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupTag.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupTag.java?rev=433750&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupTag.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPanelGroupTag.java Tue Aug 22 13:56:00 2006
@@ -0,0 +1,50 @@
+package org.apache.myfaces.custom.ppr;
+
+import org.apache.myfaces.taglib.html.ext.HtmlPanelGroupTag;
+
+import javax.faces.component.UIComponent;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: Ernst
+ * Date: 20.06.2006
+ * Time: 03:25:46
+ * To change this template use File | Settings | File Templates.
+ */
+public class PPRPanelGroupTag extends HtmlPanelGroupTag
+{
+ private String _partialTriggers;
+
+ public String getComponentType()
+ {
+ return PPRPanelGroup.COMPONENT_TYPE;
+ }
+
+ public String getRendererType()
+ {
+ return PPRPanelGroup.DEFAULT_RENDERER_TYPE;
+ }
+
+
+ public void release()
+ {
+ super.release();
+ _partialTriggers = null;
+ }
+ protected void setProperties(UIComponent component) {
+ super.setProperties(component);
+
+ setStringProperty(component, "partialTriggers", _partialTriggers);
+ }
+
+ public String getPartialTriggers()
+ {
+ return _partialTriggers;
+ }
+
+ public void setPartialTriggers(String partialTriggers)
+ {
+ this._partialTriggers = partialTriggers;
+ }
+
+}
Added: myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPhaseListener.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPhaseListener.java?rev=433750&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPhaseListener.java (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/java/org/apache/myfaces/custom/ppr/PPRPhaseListener.java Tue Aug 22 13:56:00 2006
@@ -0,0 +1,104 @@
+package org.apache.myfaces.custom.ppr;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlResponseWriterImpl;
+import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils;
+
+import javax.faces.event.PhaseListener;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.UIComponent;
+import javax.servlet.ServletResponse;
+import javax.servlet.ServletRequest;
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: Ernst
+ * Date: 25.06.2006
+ * Time: 17:28:15
+ * To change this template use File | Settings | File Templates.
+ */
+public class PPRPhaseListener implements PhaseListener
+{
+ private static Log log = LogFactory.getLog(PPRPhaseListener.class);
+ private static final String PPR_PARAMETER = "org.apache.myfaces.PPRCtrl.ajaxRequest";
+ private static final String TRIGGERED_COMPONENTS_PARAMETER = "org.apache.myfaces.PPRCtrl.triggeredComponents";
+ private static final String XML_HEADER = "<?xml version=\"1.0\"?>\n";
+
+ public void afterPhase(PhaseEvent phaseEvent)
+ {
+ }
+
+ public void beforePhase(PhaseEvent event)
+ {
+ log.debug("In PPRPhaseListener beforePhase");
+ FacesContext context = event.getFacesContext();
+ Map externalRequestMap = context.getExternalContext().getRequestParameterMap();
+
+ if (externalRequestMap.containsKey(PPR_PARAMETER))
+ {
+ ServletResponse response =
+ (ServletResponse) context.getExternalContext().getResponse();
+ ServletRequest request =
+ (ServletRequest) context.getExternalContext().getRequest();
+ UIViewRoot viewRoot = context.getViewRoot();
+ ResponseWriter writer=context.getResponseWriter();
+ response.setContentType("text/xml;charset=utf-8");
+ response.setLocale(viewRoot.getLocale());
+ String triggeredComponents=(String) externalRequestMap.get(TRIGGERED_COMPONENTS_PARAMETER);
+ try
+ {
+ PrintWriter out = response.getWriter();
+ context.setResponseWriter(new HtmlResponseWriterImpl(out,
+ null,
+ request.getCharacterEncoding()));
+ out.print(XML_HEADER);
+ out.print("<response>\n");
+ encodeTriggeredComponents(out,triggeredComponents,viewRoot,context);
+ out.print("</response>");
+ out.flush();
+ } catch (IOException e)
+ {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ }
+
+ context.responseComplete();
+ }
+ }
+
+ private void encodeTriggeredComponents(PrintWriter out, String triggeredComponents,UIViewRoot viewRoot,FacesContext context)
+ {
+ StringTokenizer st = new StringTokenizer(triggeredComponents, ",", false);
+ String clientId=null;
+ UIComponent component=null;
+ while (st.hasMoreTokens())
+ {
+ clientId = st.nextToken();
+ component = viewRoot.findComponent(clientId);
+ out.print("<component id=\"" +
+ component.getClientId(context) +
+ "\"><![CDATA[");
+ try
+ {
+ RendererUtils.renderChild(context,component);
+ } catch (IOException e)
+ {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ }
+ out.print("]]></component>");
+ }
+ }
+
+ public PhaseId getPhaseId()
+ {
+ return PhaseId.RENDER_RESPONSE;
+ }
+}
Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/resources-facesconfig/META-INF/faces-config.xml
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/resources-facesconfig/META-INF/faces-config.xml?rev=433750&r1=433749&r2=433750&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/resources-facesconfig/META-INF/faces-config.xml (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/resources-facesconfig/META-INF/faces-config.xml Tue Aug 22 13:56:00 2006
@@ -185,12 +185,16 @@
<component-class>org.apache.myfaces.custom.template.XmlTemplate</component-class>
</component>
-
<component>
<component-type>org.apache.myfaces.UISelectItems</component-type>
<component-class>org.apache.myfaces.custom.selectitems.UISelectItems</component-class>
</component>
+ <component>
+ <component-type>org.apache.myfaces.PPRPanelGroup</component-type>
+ <component-class>org.apache.myfaces.custom.ppr.PPRPanelGroup</component-class>
+ </component>
+
<!-- sandbox converters -->
<converter>
@@ -393,6 +397,12 @@
<renderer-type>org.apache.myfaces.TimedNotifierRenderer</renderer-type>
<renderer-class>org.apache.myfaces.custom.timednotifier.TimedNotifierRenderer</renderer-class>
</renderer>
+
+ <renderer>
+ <component-family>org.apache.myfaces.PPRPanelGroup</component-family>
+ <renderer-type>org.apache.myfaces.PPRPanelGroup</renderer-type>
+ <renderer-class>org.apache.myfaces.custom.ppr.PPRPanelGroupRenderer</renderer-class>
+ </renderer>
<!-- <renderer>
<component-family>javax.faces.Messages</component-family>
<renderer-type>org.apache.myfaces.MessagesSandbox</renderer-type>
@@ -405,6 +415,7 @@
<phase-listener>org.apache.myfaces.custom.ajax.api.AjaxDecodePhaseListener</phase-listener>
<phase-listener>org.apache.myfaces.custom.valueChangeNotifier.ValueChangePhaseListener</phase-listener>
<phase-listener>org.apache.myfaces.custom.redirectTracker.RedirectTrackerPhaseListener</phase-listener>
+ <phase-listener>org.apache.myfaces.custom.ppr.PPRPhaseListener</phase-listener>
</lifecycle>
<application>
Added: myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/ppr.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/ppr.js?rev=433750&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/ppr.js (added)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/ppr.js Tue Aug 22 13:56:00 2006
@@ -0,0 +1,182 @@
+//Declare the myfaces package in the JS Context
+
+dojo.provide("org.apache.myfaces");
+
+//Define the Partial Page Rendering Controller Class
+
+org.apache.myfaces.PPRCtrl = function(formId)
+{
+ this.partialTriggers = new Array;
+ this.replaceFormSubmitFunction(formId);
+ this.addButtonOnClickHandlers();
+}
+
+//Method for JSF Components to register their Partial Triggers
+
+org.apache.myfaces.PPRCtrl.prototype.addPartialTrigger= function(inputElementId, refreshZoneId)
+{
+ if (this.partialTriggers[inputElementId] === undefined)
+ {
+ this.partialTriggers[inputElementId] = refreshZoneId;
+ }
+ else
+ {
+ this.partialTriggers[inputElementId] =
+ this.partialTriggers[inputElementId] +
+ "," +
+ refreshZoneId;
+ }
+};
+
+//Callback Method which handles the AJAX Response
+
+org.apache.myfaces.PPRCtrl.prototype.handleCallback = function(type, data, evt)
+{
+ if(type == "load")
+ {
+ var componentUpdates = data.getElementsByTagName("component");
+ var componentUpdate = null;
+ var domElement = null;
+ for (var i = 0; i < componentUpdates.length; i++)
+ {
+ componentUpdate = componentUpdates[i];
+ domElement = document.getElementById(componentUpdate.getAttribute("id"));
+ domElement.innerHTML = componentUpdate.firstChild.data;
+ }
+ }
+ else
+ {
+ alert("an Error occured during the ajax-request " + data.message);
+ }
+}
+
+//This Method checks if an AJAX Call is to be done instead of submitting the form
+//as usual. If so it uses dojo.bind to submit the mainform via AJAX
+
+org.apache.myfaces.PPRCtrl.prototype.ajaxSubmitFunction = function(triggerElement)
+{
+ if(typeof triggerElement != "undefined")
+ {
+ var triggeredComponents = this.getTriggeredComponents(triggerElement);
+ if(triggeredComponents !=null)
+ {
+ var requestUri = "";
+ var formAction = this.form.attributes["action"];
+ if(formAction == null)
+ {
+ requestUri = location.href;
+ }
+ else
+ {
+ requestUri = formAction.nodeValue;
+ }
+
+ var content=new Array;
+ content[triggerElement.name]=triggerElement.value;
+ content["org.apache.myfaces.PPRCtrl.triggeredComponents"]=triggeredComponents;
+ content["org.apache.myfaces.PPRCtrl.ajaxRequest"]="true";
+ dojo.io.bind({
+ url : requestUri,
+ method : "post",
+ useCache: false,
+ content : content,
+ handle : this.handleCallback,
+ mimetype: "text/xml",
+ transport: "XMLHTTPTransport",
+ formNode: this.form
+ });
+ return false;
+ }
+ else
+ {
+ this.form.submit_orig();
+ }
+ }
+ else
+ {
+ this.form.submit_orig();
+ }
+}
+
+//This Method replaces the mainform Submitfunciton to call AJAX submit
+
+org.apache.myfaces.PPRCtrl.prototype.formSubmitReplacement = function(triggeredElement)
+{
+ this.myFacesPPRCtrl.ajaxSubmitFunction(triggeredElement);
+}
+
+//The submit Function of the mainform is replaced with the AJAX submit method
+//This Method is called during the initailisation of a PPR Controller
+
+org.apache.myfaces.PPRCtrl.prototype.replaceFormSubmitFunction = function(formId)
+{
+ this.form = document.getElementById(formId);
+ if(typeof this.form == "undefined" || this.form.tagName.toLowerCase() != "form")
+ {
+ alert("MyFaces PPR Engine: Form with id:" + formId + " not found!");
+ return;
+ }
+ this.form.submit_orig = this.form.submit;
+ this.form.myFacesPPRCtrl = this;
+ this.form.submit = this.formSubmitReplacement;
+}
+
+//TODO: event connect
+//This Method defines joinpoints for all inputs of either type submit or image
+
+org.apache.myfaces.PPRCtrl.prototype.addButtonOnClickHandlers = function()
+{
+ if (typeof this.form == "undefined" || this.form.tagName.toLowerCase() != "form")
+ {
+ return;
+ }
+
+ formButtons = new Array();
+ for (var i = 0; i < this.form.elements.length; i++)
+ {
+ if (this.form.elements[i].tagName.toLowerCase() == "input" &&
+ (this.form.elements[i].type.toLowerCase() == "submit" ||
+ this.form.elements[i].type.toLowerCase() == "image")
+ )
+ {
+ formButtons.push(this.form.elements[i]);
+ }
+ }
+
+ for (var i = 0; i < formButtons.length; i++)
+ {
+ var button = formButtons[i];
+ button.onclick_orig = button.onclick;
+ button.onclick = this.buttonOnClickHandler;
+ button.myFacesPPRCtrl=this;
+ //dojo.event.connect(button,"onClick",this,"buttonOnClickHandler");
+ }
+
+}
+
+//PointCutAdvisor which invokes the AJAX Submit Method of the PPR Controller after custom
+//onclick-handlers for submit-buttons and submit-images
+
+org.apache.myfaces.PPRCtrl.prototype.buttonOnClickHandler = function (_event)
+{
+ if(this.onclick_orig.type != "undefined")
+ {
+ this.onclick_orig();
+ }
+ return this.myFacesPPRCtrl.ajaxSubmitFunction(this);
+}
+
+//Based on the Component which triggerd the submit this Method returns a comma-seperated
+//list of component-ids which are to be updated via an AJAX call
+
+org.apache.myfaces.PPRCtrl.prototype.getTriggeredComponents = function(triggerElement)
+{
+ if (typeof triggerElement != "undefined")
+ {
+ if (typeof this.partialTriggers[triggerElement.id] != "undefined")
+ {
+ return this.partialTriggers[triggerElement.id];
+ }
+ }
+ return null;
+};
\ No newline at end of file
Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/tld/myfaces_sandbox.tld
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/tld/myfaces_sandbox.tld?rev=433750&r1=433749&r2=433750&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/tld/myfaces_sandbox.tld (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/tld/myfaces_sandbox.tld Tue Aug 22 13:56:00 2006
@@ -1186,4 +1186,20 @@
&ui_select_items_attributes;
&select_items_attributes;
</tag>
+ <!-- inputSuggest -->
+ <tag>
+ <name>pprPanelGroup</name>
+ <tag-class>org.apache.myfaces.custom.ppr.PPRPanelGroupTag</tag-class>
+ <body-content>JSP</body-content>
+ <description>PanelGroup which supports a partialTriggers Attribute similar to the one in Trinidad</description>
+ &standard_panel_group_attributes;
+ <attribute>
+ <name>partialTriggers</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ <type>java.lang.String</type>
+ <description>Comma or Space seperated List of ids from ui_command-items which trigger
+ a partial update of this PanelGroup</description>
+ </attribute>
+ </tag>
</taglib>
Added: myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/ppr/PPRExampleBean.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/ppr/PPRExampleBean.java?rev=433750&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/ppr/PPRExampleBean.java (added)
+++ myfaces/tomahawk/trunk/sandbox/examples/src/main/java/org/apache/myfaces/examples/ppr/PPRExampleBean.java Tue Aug 22 13:56:00 2006
@@ -0,0 +1,23 @@
+package org.apache.myfaces.examples.ppr;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: Ernst
+ * Date: 20.08.2006
+ * Time: 18:44:10
+ * To change this template use File | Settings | File Templates.
+ */
+public class PPRExampleBean
+{
+ private String _textField;
+
+ public String getTextField()
+ {
+ return _textField;
+ }
+
+ public void setTextField(String textField)
+ {
+ this._textField = textField;
+ }
+}
Modified: myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/examples-config.xml
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/examples-config.xml?rev=433750&r1=433749&r2=433750&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/examples-config.xml (original)
+++ myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/WEB-INF/examples-config.xml Tue Aug 22 13:56:00 2006
@@ -10,8 +10,8 @@
<!-- logger/debugging phase listener -->
<lifecycle>
- <phase-listener>org.apache.myfaces.examples.debug.DebugPhaseListener</phase-listener>
- </lifecycle>
+ <!--<phase-listener>org.apache.myfaces.examples.debug.DebugPhaseListener</phase-listener>
+ --></lifecycle>
<!-- managed bean for notifierBean-->
@@ -81,6 +81,14 @@
<managed-bean-name>ajaxChildComboBoxBean</managed-bean-name>
<managed-bean-class>org.apache.myfaces.examples.ajaxchildcombobox.AjaxChildComboBoxBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
+ </managed-bean>
+
+ <!-- Managed Beans for pprPanelGroup.jsp -->
+
+ <managed-bean>
+ <managed-bean-name>pprExampleBean</managed-bean-name>
+ <managed-bean-class>org.apache.myfaces.examples.ppr.PPRExampleBean</managed-bean-class>
+ <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
Modified: myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/home.jsp
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/home.jsp?rev=433750&r1=433749&r2=433750&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/home.jsp (original)
+++ myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/home.jsp Tue Aug 22 13:56:00 2006
@@ -1,4 +1,4 @@
-??<%@ page session="false" contentType="text/html;charset=utf-8"%>
+<%@ page session="false" contentType="text/html;charset=utf-8"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
@@ -20,7 +20,10 @@
<h:outputText style="font-size:10px;color:#FFFFFF" value=" (Sandbox Version #{buildInfo['tomahawk_version']}, using #{buildInfo ['jsf_implementation']})"/>
</f:verbatim>
</h:panelGrid>
-
+ <h:outputText value="Partial Page Rendering"/>
+ <h:panelGrid style="padding-left:25px">
+ <h:outputLink value="pprPanelGroup.jsf" ><f:verbatim>PPRPanelGroup - Panelgroup which gets refreshed by AJAX-Calls</f:verbatim></h:outputLink>
+ </h:panelGrid>
<h:outputText value="Resource Serving"/>
<h:panelGrid style="padding-left:25px">
<h:outputLink value="graphicImageDynamic.jsf" ><f:verbatim>GraphicImageDynamic - graphic image without a dedicated servlet</f:verbatim></h:outputLink>
Added: myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/pprPanelGroup.jsp
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/pprPanelGroup.jsp?rev=433750&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/pprPanelGroup.jsp (added)
+++ myfaces/tomahawk/trunk/sandbox/examples/src/main/webapp/pprPanelGroup.jsp Tue Aug 22 13:56:00 2006
@@ -0,0 +1,51 @@
+<%@ page session="false" contentType="text/html;charset=utf-8" %>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://myfaces.apache.org/sandbox" prefix="s" %>
+<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
+
+<html>
+
+<%@ include file="inc/head.inc" %>
+
+
+<body>
+<h1>PPR Example </h1>
+<span id="cnt">0</span> seconds since last page refresh.
+<script>
+ var sec=0;
+ function counter(){
+ setTimeout("counter();",1000);
+ document.getElementById("cnt").innerHTML = sec++;
+ }
+ counter();
+</script>
+
+<f:view>
+
+ <h:form id="mainform" >
+
+
+<t:messages id="messageList" styleClass="error" showDetail="true" summaryFormat="{0} "/>
+ <h:inputText value="#{pprExampleBean.textField}" />
+
+ <h:commandButton id="pprSubmit1" value="PPR Submit" />
+ <h:commandButton id="pprSubmit2" value="2 nd PPR Submit" />
+ <h:commandButton id="normalSubmit" value="Submit" />
+
+ <s:pprPanelGroup id="ppr1" partialTriggers="mainform:pprSubmit1,mainform:pprSubmit2">
+ <h:outputText value="#{pprExampleBean.textField}" />
+ </s:pprPanelGroup>
+
+ <s:pprPanelGroup id="ppr2" partialTriggers="mainform:pprSubmit1,mainform:pprSubmit2">
+ <h:outputText value="#{pprExampleBean.textField}" />
+ </s:pprPanelGroup>
+
+ </h:form>
+
+</f:view>
+
+</body>
+
+</html>
+