You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ma...@apache.org on 2009/03/06 08:25:33 UTC
svn commit: r750793 - in
/myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal:
renderkit/core/xhtml/ ui/laf/base/xhtml/ webapp/wrappers/
Author: matzew
Date: Fri Mar 6 07:25:32 2009
New Revision: 750793
URL: http://svn.apache.org/viewvc?rev=750793&view=rev
Log:
TRINIDAD-1412 - commandButton, panelAccordion and processChoiceBar have limited functionality in Non-JavaScript mobile browsers.
Thx to Mamallan Uthaman for the patch
Modified:
myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java
myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PanelAccordionRenderer.java
myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlConstants.java
myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/OptionContainerRenderer.java
myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/ProcessChoiceBarRenderer.java
myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/ProcessUtils.java
myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/wrappers/BasicHTMLBrowserRequestWrapper.java
Modified: myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java?rev=750793&r1=750792&r2=750793&view=diff
==============================================================================
--- myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java (original)
+++ myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/CommandButtonRenderer.java Fri Mar 6 07:25:32 2009
@@ -165,27 +165,28 @@
}
else
{
- if (icon != null)
- {
- renderEncodedResourceURI(context, "src", icon);
- }
-
// For Non-JavaScript browsers, encode the name attribute with the
// parameter name and value thus it would enable the browsers to
// include the name of this element in its payLoad if it submits the
// page.
- else if(!supportsScripting(arc))
+ if(!supportsScripting(arc))
{
- rw.writeAttribute("name", XhtmlUtils.getEncodedParameter
- (XhtmlConstants.SOURCE_PARAM)
- + clientId, null);
-
- rw.writeAttribute("value", text, "text");
+ String encodingKey =
+ (icon != null)? XhtmlConstants.NO_JS_INPUT_IMAGE_KEY
+ : XhtmlConstants.NO_JS_PARAMETER_KEY;
+
+ rw.writeAttribute("name", XhtmlConstants.SOURCE_PARAM + encodingKey
+ + clientId, null);
+ }
+
+ if (icon != null)
+ {
+ renderEncodedResourceURI(context, "src", icon);
}
else
{
- rw.writeAttribute("value", text, "text");;
+ rw.writeAttribute("value", text, "text");
}
}
Modified: myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PanelAccordionRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PanelAccordionRenderer.java?rev=750793&r1=750792&r2=750793&view=diff
==============================================================================
--- myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PanelAccordionRenderer.java (original)
+++ myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/PanelAccordionRenderer.java Fri Mar 6 07:25:32 2009
@@ -397,7 +397,7 @@
out.writeAttribute("value", icon, null);
- if (disabled)
+ if (disabled || !disclosable)
{
out.writeAttribute("disabled", Boolean.TRUE, "disabled");
}
Modified: myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlConstants.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlConstants.java?rev=750793&r1=750792&r2=750793&view=diff
==============================================================================
--- myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlConstants.java (original)
+++ myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/XhtmlConstants.java Fri Mar 6 07:25:32 2009
@@ -305,8 +305,12 @@
//Constants for Non JavaScript browser support
public static final String NO_JS_PARAMETER_KEY = "_parameterkey";
- public static final String NO_JS_PARAMETER_KEY_BUTTON = "go";
+ public static final String NO_JS_INPUT_IMAGE_KEY = "_inputImagekey";
public static final String MULTIPLE_VALUE_PARAM = "multipleValueParam";
+ public static final String NO_JS_PARAMETER_KEY_BUTTON = "Go";
+ public static final String NO_JS_PARAMETER_BACK_BUTTON = "Back";
+ public static final String NO_JS_PARAMETER_NEXT_BUTTON = "Next";
+
public static final String NON_JS_BROWSER = "_noJavaScript";
public static final String NON_JS_BROWSER_TRUE = "true";
public static final String NON_JS_DETAIL_DISCLOSED_ICON = "-";
Modified: myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/OptionContainerRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/OptionContainerRenderer.java?rev=750793&r1=750792&r2=750793&view=diff
==============================================================================
--- myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/OptionContainerRenderer.java (original)
+++ myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/OptionContainerRenderer.java Fri Mar 6 07:25:32 2009
@@ -468,8 +468,20 @@
{
value = XhtmlLafUtils.getFormEncodedValue(context, transName, value);
}
-
- renderValue(context, node, value);
+
+ // In the case of Non-JavaScript browsers, skip the renderValue method
+ // call since it appends the index of option element to the value
+ // attribute.
+ if (!supportsScripting(context))
+ {
+ FacesContext fContext = context.getFacesContext();
+ ResponseWriter out = fContext.getResponseWriter();
+ out.writeAttribute("value", value, null);
+ }
+ else
+ {
+ renderValue(context, node, value);
+ }
}
protected void renderValue(
Modified: myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/ProcessChoiceBarRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/ProcessChoiceBarRenderer.java?rev=750793&r1=750792&r2=750793&view=diff
==============================================================================
--- myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/ProcessChoiceBarRenderer.java (original)
+++ myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/ProcessChoiceBarRenderer.java Fri Mar 6 07:25:32 2009
@@ -28,12 +28,15 @@
import org.apache.myfaces.trinidad.component.UIXProcess;
import org.apache.myfaces.trinidad.component.core.layout.CorePanelButtonBar;
+import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.XhtmlConstants;
+import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.XhtmlUtils;
import org.apache.myfaces.trinidadinternal.share.url.FormEncoder;
import org.apache.myfaces.trinidadinternal.share.url.URLEncoder;
import org.apache.myfaces.trinidadinternal.ui.MutableUINode;
import org.apache.myfaces.trinidadinternal.ui.NodeUtils;
-import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
+import org.apache.myfaces.trinidadinternal.ui.UIConstants;
import org.apache.myfaces.trinidadinternal.ui.UINode;
+import org.apache.myfaces.trinidadinternal.ui.UIXRenderingContext;
import org.apache.myfaces.trinidadinternal.ui.beans.MarlinBean;
import org.apache.myfaces.trinidadinternal.ui.data.BoundValue;
import org.apache.myfaces.trinidadinternal.ui.data.bind.AccessKeyBoundValue;
@@ -284,22 +287,6 @@
null,
null));
}
- else
- {
- backButton = ProcessUtils.createSubmitButton(context,
- buttonTextBV,
- buttonAccessKeyBV,
- null,
- formName,
- false,
- EVENT_PARAM,
- SOURCE_PARAM,
- nameString,
- VALUE_PARAM,
- selectedIndex - 1,
- SIZE_PARAM,
- 0);
- }
}
UINode nextButton = null;
@@ -360,27 +347,28 @@
mutableNextButton.setID(buttonID);
}
nextButton = mutableNextButton;
+ context.setLocalProperty(_NEXT_BUTTON_KEY, nextButton);
}
else
{
-
- nextButton = ProcessUtils.createSubmitButton(context,
- buttonTextBV,
- buttonAccessKeyBV,
- buttonID,
- formName,
- false,
- EVENT_PARAM,
- SOURCE_PARAM,
- nameString,
- VALUE_PARAM,
- selectedIndex + 1,
- SIZE_PARAM,
- 1);
+ // For Non-JavaScript browsers, encode the parameter name and value
+ // pairs required for the next button's funtionality. This encoded
+ // value would be used as the name attribute of the element that
+ // would be rendered for the next button's funtionality.
+ String nameAttri = XhtmlUtils.getEncodedNameAttribute (
+ // Array should be in the order of parameter
+ // name and value pair
+ new String[]{SOURCE_PARAM,
+ nameString,
+ EVENT_PARAM,
+ UIConstants.GOTO_EVENT,
+ VALUE_PARAM,
+ Long.toString(selectedIndex + 1),
+ SIZE_PARAM,
+ Integer.toString(1)});
+
+ context.setLocalProperty(_NON_JS_NEXT_BUTTON_NAME_ATTR, nameAttri);
}
-
- context.setLocalProperty(_NEXT_BUTTON_KEY, nextButton);
-
}
// start the rendering
@@ -403,7 +391,34 @@
if (showBackButton)
{
- backButton.render(context);
+ if (supportsScripting)
+ {
+ backButton.render(context);
+ }
+ else
+ {
+ // For Non-JavaScript browsers, render an input element(type= submit)
+ // to submit the page. The name attribute of this element is encoded
+ // with parameter name and value pairs thus it would enable browsers
+ // to include the name of this element in its payLoad if it submits the
+ // page.
+ String nameAttri = XhtmlUtils.getEncodedNameAttribute (
+ // Array should be in the order of parameter name
+ // and value pair
+ new String[]{SOURCE_PARAM,
+ nameString,
+ EVENT_PARAM,
+ UIConstants.GOTO_EVENT,
+ VALUE_PARAM,
+ Long.toString(selectedIndex - 1),
+ SIZE_PARAM,
+ Integer.toString(0)});
+
+ _renderSubmitButtonNonJSBrowser(
+ context,
+ XhtmlConstants.NO_JS_PARAMETER_BACK_BUTTON,
+ nameAttri );
+ }
writer.endElement("td");
_renderSpacerCell(context);
@@ -448,12 +463,14 @@
UINode node
) throws IOException
{
+ // start rendering
+ ResponseWriter writer = context.getResponseWriter();
+ boolean renderAsTable = _renderAsTable(context, node);
+
+ if (supportsScripting(context))
+ {
UINode nextButton =
(UINode)context.getLocalProperty(0,_NEXT_BUTTON_KEY, null);
-
- // start rendering
- ResponseWriter writer = context.getResponseWriter();
- boolean renderAsTable = _renderAsTable(context, node);
// don't render the next button on last step
if (nextButton != null)
{
@@ -467,14 +484,59 @@
context.setLocalProperty(_NEXT_BUTTON_KEY, null);
}
-
+ }
+ else
+ {
writer.endElement("td");
-
- if (renderAsTable)
+ writer.startElement("td", null);
+
+ // For Non-JavaScript browsers, render an input element(type= submit)
+ // to submit the page. The name attribute of this element is encoded
+ // with parameter name and value pairs thus it would enable browsers
+ // to include the name of this element in its payLoad if it submits the
+ // page.
+ String nameAttri =
+ XhtmlUtils.getEncodedNameAttribute (
+ // Array should be in the order of parameter name and value pair
+ new String[]{ XhtmlConstants.MULTIPLE_VALUE_PARAM,
+ BaseLafUtils.getStringAttributeValue
+ (context, node, NAME_ATTR)});
+
+ _renderSubmitButtonNonJSBrowser(
+ context,
+ XhtmlConstants.NO_JS_PARAMETER_KEY_BUTTON,
+ nameAttri);
+
+ String nextButtonNameAttr =
+ (String)context.getLocalProperty(
+ 0, _NON_JS_NEXT_BUTTON_NAME_ATTR, null);
+
+ if (nextButtonNameAttr != null)
{
- writer.endElement("tr");
- writer.endElement("table");
+
+ writer.endElement("td");
+
+ _renderSpacerCell(context);
+
+ writer.startElement("td", null);
+
+ _renderSubmitButtonNonJSBrowser(
+ context,
+ XhtmlConstants.NO_JS_PARAMETER_NEXT_BUTTON,
+ nextButtonNameAttr );
+
+ context.setLocalProperty(_NON_JS_NEXT_BUTTON_NAME_ATTR, null);
+
}
+ }
+
+ writer.endElement("td");
+
+ if (renderAsTable)
+ {
+ writer.endElement("tr");
+ writer.endElement("table");
+ }
}
@@ -722,6 +784,32 @@
}
+ /**
+ * @param context a <code>UIXRenderingContext</code>
+ * @param valueAttri a <code>String</code> it is the value attribute
+ * of the submit button
+ * @param nameAttri a <code>String</code> it is the name attribute
+ * of the submit button
+ *
+ * This method renders an input element(type= submit) to submit the page.
+ * The name attribute of this element is encoded with parameter name and
+ * value pairs thus it would enable browsers to include the name of this
+ * element in its payLoad if it submits the page.
+ *
+ */
+ private void _renderSubmitButtonNonJSBrowser(
+ UIXRenderingContext context,
+ String valueAttri,
+ String nameAttri
+ ) throws IOException
+ {
+ ResponseWriter writer = context.getResponseWriter();
+ writer.startElement("input", null);
+ renderAttribute(context, "type", "submit");
+ renderAttribute(context, "value", valueAttri);
+ renderAttribute(context, "name", nameAttri);
+ writer.endElement("input");
+ }
//
// Private variables
@@ -737,5 +825,6 @@
static private final Object _NEXT_BUTTON_KEY = new Object();
static private final Object _NEW_PATH_KEY = new Object();
+ static private final Object _NON_JS_NEXT_BUTTON_NAME_ATTR = new Object();
}
Modified: myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/ProcessUtils.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/ProcessUtils.java?rev=750793&r1=750792&r2=750793&view=diff
==============================================================================
--- myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/ProcessUtils.java (original)
+++ myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/ProcessUtils.java Fri Mar 6 07:25:32 2009
@@ -73,20 +73,6 @@
submitButton.setAttributeValue(UIConstants.TEXT_ATTR, buttonText);
submitButton.setAttributeValue(UIConstants.ACCESS_KEY_ATTR,
buttonAccessKey);
-
- String nameAttri = XhtmlUtils.getEncodedNameAttribute (
- //Array should be in the order of parameter name and value pair
- new String[]{sourceKey,
- source,
- eventKey,
- UIConstants.GOTO_EVENT,
- valueKey,
- Long.toString(value),
- sizeKey,
- Integer.toString(size)});
-
- submitButton.setAttributeValue(UIConstants.NAME_ATTR, nameAttri);
-
return submitButton;
}
Modified: myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/wrappers/BasicHTMLBrowserRequestWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/wrappers/BasicHTMLBrowserRequestWrapper.java?rev=750793&r1=750792&r2=750793&view=diff
==============================================================================
--- myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/wrappers/BasicHTMLBrowserRequestWrapper.java (original)
+++ myfaces/trinidad/branches/1.2.11.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/wrappers/BasicHTMLBrowserRequestWrapper.java Fri Mar 6 07:25:32 2009
@@ -67,13 +67,30 @@
while (enumeration.hasMoreElements() && findSubmit)
{
paramName = (String)enumeration.nextElement();
- //Search for name attribute that contains encoded parameters
+
+ // Search for name attribute that contains encoded parameters
if (paramName.indexOf(XhtmlConstants.NO_JS_PARAMETER_KEY) != -1)
{
encodedParameterName = paramName;
paramDetail = paramName.split(XhtmlConstants.NO_JS_PARAMETER_KEY);
findSubmit = false;
}
+
+ // If a page is submitted by an input element of type 'image', browser
+ // will generate two parameter names from the element's name attribute
+ // that contains encoded parameters. Each of the parameter name generated
+ // represents the coordinate of the image that was activated. Example,
+ // if the name attribute of the element is 'paramName', browser will
+ // create two parameter names like 'paramName.x' and 'paramName.y'.
+ else if (paramName.indexOf(XhtmlConstants.NO_JS_INPUT_IMAGE_KEY) != -1)
+ {
+ encodedParameterName = paramName;
+
+ // Remove '.x' or '.y' from the parameter name before decoding
+ paramName = paramName.substring(0, paramName.length()-2);
+ paramDetail = paramName.split(XhtmlConstants.NO_JS_INPUT_IMAGE_KEY);
+ findSubmit = false;
+ }
}
decodedParamMap = new HashMap<String, String[]>();
@@ -198,6 +215,3 @@
// This map is the integration of decodedParamMap and payLoad's parameterMap
private Map<String, String[]> modifiableParameterMap;
}
-
-
-