You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by pr...@apache.org on 2005/11/18 23:39:17 UTC
svn commit: r345586 - in
/myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom:
ajax/api/AjaxPhaseListener.java ajax/util/AjaxRendererUtils.java
inputAjax/HtmlInputTextAjaxRenderer.java
Author: prophecy
Date: Fri Nov 18 14:39:11 2005
New Revision: 345586
URL: http://svn.apache.org/viewcvs?rev=345586&view=rev
Log:
- Made t:message elements work with Ajax errors
- fixed UIComponent.findComponent to actually work.
Modified:
myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/ajax/api/AjaxPhaseListener.java
myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/ajax/util/AjaxRendererUtils.java
myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/inputAjax/HtmlInputTextAjaxRenderer.java
Modified: myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/ajax/api/AjaxPhaseListener.java
URL: http://svn.apache.org/viewcvs/myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/ajax/api/AjaxPhaseListener.java?rev=345586&r1=345585&r2=345586&view=diff
==============================================================================
--- myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/ajax/api/AjaxPhaseListener.java (original)
+++ myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/ajax/api/AjaxPhaseListener.java Fri Nov 18 14:39:11 2005
@@ -80,36 +80,20 @@
}
}
- public UIComponent findComponent(FacesContext context, UIComponent root, String clientId)
- {
- UIComponent component = null;
- for(int i = 0; i < root.getChildCount() && component == null; i++)
- {
- UIComponent child = (UIComponent)root.getChildren().get(i);
- component = findComponent(context, child, clientId);
- }
-
- if(component == null && root.getClientId(context).equals(clientId))
- {
- component = root;
- }
- return component;
- }
-
public void afterPhase(PhaseEvent event)
{
log.debug("In AjaxPhaseListener afterPhase");
FacesContext context = event.getFacesContext();
if (context.getExternalContext().getRequestParameterMap().containsKey("affectedAjaxComponent"))
- {
+ {
+ UIViewRoot root = context.getViewRoot();
String clientId = (String)context.getExternalContext().getRequestParameterMap().get("affectedAjaxComponent");
- UIComponent ajaxComponent = findComponent(context, context.getViewRoot(), clientId);
+ UIComponent ajaxComponent = root.findComponent(clientId);
log.debug("affectedAjaxComponent: " + ajaxComponent + " - " + ajaxComponent.getId());
if (ajaxComponent instanceof AjaxComponent)
{
-
try
{
// TR - What is this HtmlBufferResponseWriterWrapper stuff for???? This caused me hours and hours of pain
@@ -119,9 +103,7 @@
Writer htmlResponseWriter = response.getWriter();
context.setResponseWriter(new HtmlResponseWriterImpl(htmlResponseWriter, "text/html", "UTF-8"));
}
-
((AjaxComponent) ajaxComponent).encodeAjax(context);
-
}
catch (IOException e)
{
Modified: myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/ajax/util/AjaxRendererUtils.java
URL: http://svn.apache.org/viewcvs/myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/ajax/util/AjaxRendererUtils.java?rev=345586&r1=345585&r2=345586&view=diff
==============================================================================
--- myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/ajax/util/AjaxRendererUtils.java (original)
+++ myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/ajax/util/AjaxRendererUtils.java Fri Nov 18 14:39:11 2005
@@ -3,6 +3,7 @@
import org.apache.myfaces.component.html.util.AddResource;
import org.apache.myfaces.renderkit.JSFAttr;
import org.apache.myfaces.renderkit.html.HTML;
+import org.apache.myfaces.renderkit.html.HtmlMessageRendererBase;
import org.apache.myfaces.custom.prototype.PrototypeResourceLoader;
import org.apache.myfaces.custom.ajax.AjaxCallbacks;
import org.apache.commons.logging.Log;
@@ -11,6 +12,7 @@
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
import javax.faces.application.ViewHandler;
import javax.faces.application.FacesMessage;
import javax.servlet.http.HttpServletResponse;
@@ -100,57 +102,73 @@
out.writeText("var " + jsNameSpace + "onStartFunction = " + component.getOnStart() + ";\n", null);
StringBuffer buff = new StringBuffer();
- buff.append("\n").append(
- "function ").append(jsNameSpace).append("notifyElement(originalRequest, successful)\n").append(
- "{\n").append(
- " //alert(\"originalRequest: \" + originalRequest + \" - \" + successful + \"\\ntext: \" + originalRequest.responseText);\n").append(
- " var errorArray = originalRequest.responseXML.getElementsByTagName(\"response\")[0].getElementsByTagName(\"error\");\n").append(
- " if(errorArray && errorArray.length > 0){\n").append(
- // could easily loop this and handle more than one error at a time, but that wouldn't happen now
- " var myObError = errorArray[0];\n").append(
- " var errorClientId = myObError.getAttribute(\"elname\");\n").append(
- " var errorSeverity = myObError.getAttribute(\"severity\");\n").append(
- " var errorSummary = myObError.getAttribute(\"summary\");\n").append(
- " ").append(jsNameSpace).append("displayError(errorClientId, errorSeverity, errorSummary);\n").append(
- " }\n").append(
- " var myObElementArray = originalRequest.responseXML.getElementsByTagName(\"response\")[0].getElementsByTagName(\"elementUpdated\");\n").append(
- " if(myObElementArray && myObElementArray.length > 0){").append(
- " var myObElement = myObElementArray[0];\n").append(
- " var elname = myObElement.getAttribute(\"elname\");\n").append(
- " var elvalue = myObElement.getAttribute(\"elvalue\");\n").append(
- " if (successful)\n").append(
- " {\n");
+ buff.append("\n")
+ .append("function ").append(jsNameSpace).append("notifyElement(originalRequest, successful)\n")
+ .append("{\n")
+ .append(" //alert(\"originalRequest: \" + originalRequest + \" - \" + successful + \"\\ntext: \" + originalRequest.responseText);\n")
+ .append(" var errorArray = originalRequest.responseXML.getElementsByTagName(\"response\")[0].getElementsByTagName(\"error\");\n")
+ .append(" if(errorArray && errorArray.length > 0){\n")
+ // could easily loop this and handle more than one error at a time, but that wouldn't happen now
+ .append(" var myObError = errorArray[0];\n")
+ .append(" var errorClientId = myObError.getAttribute(\"elname\");\n")
+ .append(" var errorSeverity = myObError.getAttribute(\"severity\");\n")
+ .append(" var errorSummary = myObError.getAttribute(\"summary\");\n")
+ .append(" var style = myObError.getAttribute(\"style\");\n")
+ .append(" var styleClass = myObError.getAttribute(\"styleClass\");\n")
+ .append(" ")
+ .append(jsNameSpace).append("displayError(errorClientId, errorSeverity, errorSummary, styleClass, style);\n")
+ .append(" }\n")
+ .append(" var myObElementArray = originalRequest.responseXML.getElementsByTagName(\"response\")[0].getElementsByTagName(\"elementUpdated\");\n")
+ .append(" if(myObElementArray && myObElementArray.length > 0){")
+ .append(" var myObElement = myObElementArray[0];\n")
+ .append(" var elname = myObElement.getAttribute(\"elname\");\n")
+ .append(" var elvalue = myObElement.getAttribute(\"elvalue\");\n")
+ .append(" if (successful)\n")
+ .append(" {\n");
if (component.getOnSuccess() != null)
buff.append(" ").append(jsNameSpace).append("onSuccessFunction(elname, elvalue);\n");
- buff.append(" }\n").append(
- " else\n").append(
- " {\n");
+ buff.append(" }\n")
+ .append(" else\n")
+ .append(" {\n");
if (component.getOnFailure() != null)
buff.append(" ").append(jsNameSpace).append("onFailureFunction(elname, elvalue);\n");
buff.append(" }\n").append(" }\n").append("}\n");
buff.append("function ").append(jsNameSpace)
- .append("displayError(elname, severity, summary){\n")
- .append(" var msgSpan = document.getElementById(\"msg_\" + elname);\n")
- .append(" msgSpan.innerHTML = summary;\n")
+ .append("displayError(elname, severity, summary, styleClass, style){\n")
+ .append(" var msgSpan = document.getElementById(\"msgFor_\" + elname);\n")
+ .append(" if(msgSpan){\n")
+ .append(" msgSpan.innerHTML = summary;\n")
+ .append(" if(styleClass) msgSpan.className = styleClass;")
+ //.append(" if(style) msgSpan.style = style;") // guess you can't swap out the entire style like this
+ .append(" }\n")
.append("}\n");
- buff.append("function ").append(jsNameSpace).append("notifyElementFailure(originalRequest){\n")
- .append(" ").append(jsNameSpace).append("notifyElement(originalRequest, false);\n" + "}\n");
- buff.append("function ").append(jsNameSpace).append("notifyElementSuccess(originalRequest){\n")
- .append(" ").append(jsNameSpace).append("notifyElement(originalRequest, true);\n");
+ buff.append("function ").append(jsNameSpace)
+ .append("notifyElementFailure(originalRequest){\n")
+ .append(" ").append(jsNameSpace)
+ .append("notifyElement(originalRequest, false);\n" + "}\n");
+ buff.append("function ").append(jsNameSpace)
+ .append("notifyElementSuccess(originalRequest){\n")
+ .append(" ").append(jsNameSpace)
+ .append("notifyElement(originalRequest, true);\n");
buff.append("}\n")
- .append("function ").append(jsNameSpace).append("complete(originalRequest){\n")
- // todo: allow for an onComplete attribute
+ .append("function ").append(jsNameSpace)
+ .append("complete(originalRequest){\n")
+ // todo: allow for an onComplete attribute
.append("}\n");
// a function that takes an element id
buff.append("function ").append(jsNameSpace).append("ajaxSubmit1(elname){\n")
.append(" var el = document.getElementById(elname);\n")
.append(" var elvalue = el.value;\n")
- .append(" ").append(jsNameSpace).append("ajaxSubmit(elname, elvalue, el);\n")
+ .append(" ")
+ .append(jsNameSpace)
+ .append("ajaxSubmit(elname, elvalue, el);\n")
.append("}\n");
// a function that can take the actual element for things like HtmlSelectMany
buff.append("function ").append(jsNameSpace).append("ajaxSubmit2(el, elname){\n")
.append(" var elvalue = el.value;\n")
- .append(" ").append(jsNameSpace).append("ajaxSubmit(elname, elvalue, el);\n")
+ .append(" ")
+ .append(jsNameSpace)
+ .append("ajaxSubmit(elname, elvalue, el);\n")
.append("}\n");
// and now the actual function that will send the request
@@ -225,10 +243,33 @@
Iterator iter = context.getMessages(clientId);
while (iter.hasNext())
{
+
FacesMessage msg = (FacesMessage) iter.next();
+ String style = "";
+ String styleClass = "";
+
+ String msgForId = "msgFor_" + clientId;
+ System.out.println("Looking for component: " + msgForId);
+ UIComponent msgComponent = context.getViewRoot().findComponent(msgForId);
+ if (msgComponent != null)
+ {
+ System.out.println("Component found");
+ // then send to update single component
+ // get styleclass
+ String[] styleAndClass = HtmlMessageRendererBase.getStyleAndStyleClass(msgComponent, msg.getSeverity());
+ style = styleAndClass[0];
+ styleClass = styleAndClass[1];
+ System.out.println("style: " + style);
+ }
+ else
+ {
+ // send to update global messages, maybe this could happen on the client side though ?
+ }
buff.append("<error elname=\"").append(request.getParameter("elname"))
- .append("\" severity=\"").append(msg.getSeverity().toString())
- .append("\" summary=\"").append(msg.getSummary())
+ .append("\" severity=\"").append(msg.getSeverity().toString());
+ if (styleClass != null) buff.append("\" styleClass=\"").append(styleClass);
+ if (style != null) buff.append("\" style=\"").append(style);
+ buff.append("\" summary=\"").append(msg.getSummary())
.append("\" />");
buff.append("\n");
hasErrorMessages = true;
Modified: myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/inputAjax/HtmlInputTextAjaxRenderer.java
URL: http://svn.apache.org/viewcvs/myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/inputAjax/HtmlInputTextAjaxRenderer.java?rev=345586&r1=345585&r2=345586&view=diff
==============================================================================
--- myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/inputAjax/HtmlInputTextAjaxRenderer.java (original)
+++ myfaces/sandbox/trunk/src/java/org/apache/myfaces/custom/inputAjax/HtmlInputTextAjaxRenderer.java Fri Nov 18 14:39:11 2005
@@ -105,10 +105,10 @@
}
// output a span for error messages
- writer.startElement(HTML.SPAN_ELEM, component);
- writer.writeAttribute(HTML.ID_ATTR, "msg_" + clientId, null);
+ /*writer.startElement(HTML.SPAN_ELEM, component);
+ writer.writeAttribute(HTML.ID_ATTR, "msgFor_" + clientId, null);
writer.writeText(" ", null);
- writer.endElement(HTML.SPAN_ELEM);
+ writer.endElement(HTML.SPAN_ELEM);*/
}