You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ba...@apache.org on 2007/07/09 01:43:33 UTC
svn commit: r554483 -
/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/datascroller/HtmlDataScrollerRenderer.java
Author: baranda
Date: Sun Jul 8 16:43:32 2007
New Revision: 554483
URL: http://svn.apache.org/viewvc?view=rev&rev=554483
Log:
Fixes TOMAHAWK-777 (DataScroller breaks facets functionality when using trinidad default renderkit)
Modified:
myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/datascroller/HtmlDataScrollerRenderer.java
Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/datascroller/HtmlDataScrollerRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/datascroller/HtmlDataScrollerRenderer.java?view=diff&rev=554483&r1=554482&r2=554483
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/datascroller/HtmlDataScrollerRenderer.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/datascroller/HtmlDataScrollerRenderer.java Sun Jul 8 16:43:32 2007
@@ -18,9 +18,11 @@
*/
package org.apache.myfaces.custom.datascroller;
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
+import org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr;
+import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils;
+import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
+import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRenderer;
+import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils;
import javax.faces.application.Application;
import javax.faces.component.UIComponent;
@@ -29,11 +31,9 @@
import javax.faces.component.html.HtmlOutputText;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
-
-import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils;
-import org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr;
-import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRenderer;
-import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
/**
* Renderer for the HtmlDataScroller component.
@@ -62,7 +62,7 @@
RendererUtils.checkParamValidity(context, component, HtmlDataScroller.class);
Map parameter = context.getExternalContext().getRequestParameterMap();
- String param = (String) parameter.get(component.getClientId(context));
+ String param = (String) parameter.get(calculateHiddenFieldId(context, (HtmlDataScroller)component));
if (param != null && param.length() > 0)
{
if (param.startsWith(PAGE_NAVIGATION))
@@ -200,10 +200,84 @@
return;
}
+ renderSubmitFunction(facesContext, scroller);
+ renderHiddenField(facesContext, scroller);
+ renderInvisibleSubmitButton(facesContext, scroller);
+
renderScroller(facesContext, scroller);
removeVariables(facesContext, scroller);
}
+ protected void renderSubmitFunction(FacesContext facesContext, HtmlDataScroller scroller)
+ throws IOException {
+ HtmlRendererUtils.ScriptContext scriptContext = new HtmlRendererUtils.ScriptContext();
+ scriptContext.append("function ");
+ scriptContext.append(calculateSubmitFunctionName(facesContext, scroller));
+ scriptContext.append("(paramValue) {").prettyLine();
+ scriptContext.increaseIndent();
+
+ scriptContext.append("var hidden = document.getElementById('");
+ scriptContext.append(calculateHiddenFieldId(facesContext, scroller));
+ scriptContext.append("');");
+ scriptContext.prettyLine();
+ scriptContext.append("hidden.value = paramValue;");
+ scriptContext.prettyLine();
+
+ scriptContext.append("var submitBtn = document.getElementById('");
+ scriptContext.append(calculateInvisibleButtonId(facesContext, scroller));
+ scriptContext.append("');");
+ scriptContext.prettyLine();
+ scriptContext.append("submitBtn.click()");
+ scriptContext.prettyLine();
+
+ scriptContext.decreaseIndent();
+ scriptContext.append("}");
+
+ ResponseWriter writer = facesContext.getResponseWriter();
+ writer.startElement(HTML.SCRIPT_ELEM, scroller);
+ writer.writeAttribute(HTML.SCRIPT_TYPE_ATTR, HTML.SCRIPT_TYPE_TEXT_JAVASCRIPT, null);
+ writer.writeText(scriptContext.toString(), null);
+ writer.endElement(HTML.SCRIPT_ELEM);
+ }
+
+ protected String calculateSubmitFunctionName(FacesContext facesContext, HtmlDataScroller scroller) {
+ String clientId = scroller.getClientId(facesContext);
+ return clientId.replaceAll(":", "_")+"_submit";
+ }
+
+ protected void renderHiddenField(FacesContext facesContext, HtmlDataScroller scroller)
+ throws IOException {
+
+ ResponseWriter writer = facesContext.getResponseWriter();
+
+ writer.startElement(HTML.INPUT_ELEM, scroller);
+ writer.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_HIDDEN, null);
+ String id = calculateHiddenFieldId(facesContext, scroller);
+ writer.writeAttribute(HTML.ID_ATTR, id, null);
+ writer.writeAttribute(HTML.NAME_ATTR, id, null);
+ writer.endElement(HTML.INPUT_ELEM);
+ }
+
+ protected String calculateHiddenFieldId(FacesContext facesContext, HtmlDataScroller scroller) {
+ return scroller.getClientId(facesContext)+"_hidden";
+ }
+
+ protected void renderInvisibleSubmitButton(FacesContext facesContext, HtmlDataScroller scroller)
+ throws IOException {
+
+ ResponseWriter writer = facesContext.getResponseWriter();
+
+ writer.startElement(HTML.INPUT_ELEM, scroller);
+ writer.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_SUBMIT, null);
+ writer.writeAttribute(HTML.ID_ATTR, calculateInvisibleButtonId(facesContext, scroller), null);
+ writer.writeAttribute(HTML.STYLE_ATTR, "display:none;", null);
+ writer.endElement(HTML.INPUT_ELEM);
+ }
+
+ protected String calculateInvisibleButtonId(FacesContext facesContext, HtmlDataScroller scroller) {
+ return scroller.getId()+"_submitButton";
+ }
+
protected void renderScroller(FacesContext facesContext, HtmlDataScroller scroller)
throws IOException
{
@@ -325,28 +399,52 @@
writer.startElement(isListLayout(scroller)?HTML.UL_ELEM:HTML.TABLE_ELEM, scroller);
}
+
protected void renderFacet(FacesContext facesContext, HtmlDataScroller scroller,
UIComponent facetComp, String facetName) throws IOException
{
- String onclick = scroller.getOnclick();
- String ondblclick = scroller.getOndblclick();
+ renderLinkStart(facesContext, scroller, facetName);
- HtmlCommandLink link = getLink(facesContext, scroller, facetName);
- if(onclick != null){
- link.setOnclick(onclick);
- }
- if(ondblclick != null){
- link.setOndblclick(ondblclick);
- }
-
- link.encodeBegin(facesContext);
facetComp.encodeBegin(facesContext);
if (facetComp.getRendersChildren())
facetComp.encodeChildren(facesContext);
facetComp.encodeEnd(facesContext);
- link.encodeEnd(facesContext);
+
+ renderLinkEnd(facesContext);
+ }
+
+ protected void renderLinkStart(FacesContext facesContext, HtmlDataScroller scroller,
+ String paramValue) throws IOException
+ {
+ String onclick = scroller.getOnclick();
+ String ondblclick = scroller.getOndblclick();
+
+ ResponseWriter writer = facesContext.getResponseWriter();
+ writer.startElement(HTML.ANCHOR_ELEM, scroller);
+ writer.writeAttribute(HTML.HREF_ATTR, "#", null);
+
+ StringBuffer onclickJavascript = new StringBuffer();
+ if (onclick != null) {
+ onclickJavascript.append(onclick).append(";");
+ }
+ onclickJavascript.append(calculateSubmitFunctionName(facesContext, scroller));
+ onclickJavascript.append("('"+paramValue+"')");
+
+ writer.writeAttribute(HTML.ONCLICK_ATTR, onclickJavascript.toString(), null);
+
+ if (ondblclick != null) {
+ writer.writeAttribute(HTML.ONDBLCLICK_ATTR, ondblclick, null);
+ }
}
+ protected void renderLinkEnd(FacesContext facesContext) throws IOException
+ {
+ ResponseWriter writer = facesContext.getResponseWriter();
+ writer.endElement(HTML.ANCHOR_ELEM);
+ }
+
+
+
/**
* The "paginator" is a sequence of page numbers which the user can click
* on to leap directly to a specific page of data.
@@ -438,17 +536,9 @@
}
else
{
- HtmlCommandLink link = getLink(facesContext, scroller, Integer.toString(idx), idx);
- if(onclick != null){
- link.setOnclick(onclick);
- }
- if(ondblclick != null){
- link.setOndblclick(ondblclick);
- }
-
- link.encodeBegin(facesContext);
- link.encodeChildren(facesContext);
- link.encodeEnd(facesContext);
+ renderLinkStart(facesContext, scroller, PAGE_NAVIGATION+Integer.toString(idx));
+ writer.write(Integer.toString(idx));
+ renderLinkEnd(facesContext);
}
writePaginatorElementEnd(writer, scroller);
@@ -485,6 +575,12 @@
writer.startElement(isListLayout(scroller)?HTML.UL_ELEM:HTML.TABLE_ELEM, scroller);
}
+ protected String getParameterValue(FacesContext facesContext, HtmlDataScroller scroller,
+ String text, int pageIndex) {
+ String id = HtmlDataScrollerRenderer.PAGE_NAVIGATION + Integer.toString(pageIndex);
+ return id;
+ }
+
protected HtmlCommandLink getLink(FacesContext facesContext, HtmlDataScroller scroller,
String text, int pageIndex)
{
@@ -530,6 +626,7 @@
parameter.setTransient(true);
parameter.setName(scroller.getClientId(facesContext));
parameter.setValue(facetName);
+ System.out.println("\t\tWith param: id: "+parameter.getId()+" name:" +parameter.getName()+" / "+parameter.getValue());
List children = link.getChildren();
children.add(parameter);
scroller.getChildren().add(link);