You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by an...@apache.org on 2007/04/20 17:40:41 UTC
svn commit: r530835 - in /tapestry/tapestry4/trunk/tapestry-framework/src:
java/org/apache/tapestry/dojo/form/Autocompleter.java
java/org/apache/tapestry/dojo/form/Autocompleter.jwc
test/org/apache/tapestry/dojo/form/TestAutocompleter.java
Author: andyhot
Date: Fri Apr 20 08:40:37 2007
New Revision: 530835
URL: http://svn.apache.org/viewvc?view=rev&rev=530835
Log:
Autocompleter to support local mode, i.e. getting values from the option tags.
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.jwc
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java?view=diff&rev=530835&r1=530834&r2=530835
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java Fri Apr 20 08:40:37 2007
@@ -49,6 +49,7 @@
{
// mode, can be remote or local (local being from html rendered option elements)
private static final String MODE_REMOTE = "remote";
+ private static final String MODE_LOCAL = "local";
/**
*
@@ -56,6 +57,10 @@
*/
protected void renderFormWidget(IMarkupWriter writer, IRequestCycle cycle)
{
+ IAutocompleteModel model = getModel();
+ if (model == null)
+ throw Tapestry.createRequiredParameterException(this, "model");
+
renderDelegatePrefix(writer, cycle);
writer.begin("select");
@@ -76,17 +81,32 @@
writer.print(" ");
+ if (isLocal())
+ {
+ List list = model.getValues("");
+ for (int i=0; i<list.size(); i++)
+ {
+ Object key = model.getPrimaryKey(list.get(i));
+ writer.begin("option");
+ writer.attribute("value", getDataSqueezer().squeeze(key));
+ writer.print(model.getLabelFor(list.get(i)));
+ writer.end();
+ }
+ }
+
writer.end();
renderDelegateSuffix(writer, cycle);
- ILink link = getDirectService().getLink(true, new DirectServiceParameter(this));
-
Map parms = new HashMap();
parms.put("id", getClientId());
JSONObject json = new JSONObject();
- json.put("dataUrl", link.getURL() + "&filter=%{searchString}");
- json.put("mode", MODE_REMOTE);
+ if (!isLocal())
+ {
+ ILink link = getDirectService().getLink(true, new DirectServiceParameter(this));
+ json.put("dataUrl", link.getURL() + "&filter=%{searchString}");
+ }
+ json.put("mode", isLocal() ? MODE_LOCAL : MODE_REMOTE);
json.put("widgetId", getName());
json.put("name", getName());
json.put("searchDelay", getSearchDelay());
@@ -95,9 +115,6 @@
json.put("forceValidOption", isForceValidOption());
json.put("disabled", isDisabled());
- IAutocompleteModel model = getModel();
- if (model == null)
- throw Tapestry.createRequiredParameterException(this, "model");
Object value = getValue();
Object key = value != null ? model.getPrimaryKey(value) : null;
@@ -202,6 +219,9 @@
/** Forces select to only allow valid option strings. */
public abstract boolean isForceValidOption();
+
+ /** Forces select to work in local mode (no xhr). */
+ public abstract boolean isLocal();
/** @since 2.2 * */
public abstract Object getValue();
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.jwc
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.jwc?view=diff&rev=530835&r1=530834&r2=530835
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.jwc (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.jwc Fri Apr 20 08:40:37 2007
@@ -41,6 +41,13 @@
<parameter name="forceValidOption" default-value="true" />
+ <parameter name="local">
+ <description>Makes the autocompleter work in local mode.
+ All values provided by the model are rendered as options in the
+ html and are used for autocomplete.
+ </description>
+ </parameter>
+
<parameter name="displayName"/>
<parameter name="validators"/>
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java?view=diff&rev=530835&r1=530834&r2=530835
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java Fri Apr 20 08:40:37 2007
@@ -40,6 +40,7 @@
import org.apache.tapestry.services.ResponseBuilder;
import org.apache.tapestry.valid.IValidationDelegate;
import org.apache.tapestry.valid.ValidatorException;
+import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
@@ -152,8 +153,20 @@
verify();
}
- public void test_Render()
- {
+ @DataProvider(name="renderings")
+ public Object[][] createRenderings() {
+ return new Object[][] {
+ {"<span class=\"prefix\"><select name=\"fred\" autocomplete=\"off\" id=\"fred\" class=\"validation-delegate\"> </select></span>",
+ Boolean.FALSE},
+ {"<span class=\"prefix\"><select name=\"fred\" autocomplete=\"off\" id=\"fred\" class=\"validation-delegate\"> <option " +
+ "value=\"1p\">Simple 1</option><option value=\"2p\">Simple 2</option><option value=\"3p\">Simple 3</option></select></span>",
+ Boolean.TRUE}
+ };
+ }
+
+ @Test(dataProvider = "renderings")
+ public void test_Render(String outcome, Boolean local)
+ {
IAutocompleteModel model = createModel();
ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
DataSqueezer ds = newMock(DataSqueezer.class);
@@ -179,7 +192,7 @@
"script", script,
"validatableFieldSupport", vfs,
"value", match,
- "dataSqueezer", ds
+ "dataSqueezer", ds, "local", local
});
expect(cycle.renderStackPush(component)).andReturn(component);
@@ -210,16 +223,23 @@
expect(resp.isDynamic()).andReturn(false).anyTimes();
vfs.renderContributions(component, writer, cycle);
-
- trainGetLinkCheckIgnoreParameter(engine, cycle, true, dsp, link);
-
- trainGetURL(link, "urlstring");
+ if (!local.booleanValue())
+ {
+ trainGetLinkCheckIgnoreParameter(engine, cycle, true, dsp, link);
+ trainGetURL(link, "urlstring");
+ }
+ else
+ {
+ expect(ds.squeeze(1)).andReturn("1p");
+ expect(ds.squeeze(2)).andReturn("2p");
+ expect(ds.squeeze(3)).andReturn("3p");
+ }
+ // for the default value
+ expect(ds.squeeze(2)).andReturn("2p");
PageRenderSupport prs = newPageRenderSupport();
trainGetPageRenderSupport(cycle, prs);
- expect(ds.squeeze(2)).andReturn("2p");
-
script.execute(eq(component), eq(cycle), eq(prs), isA(Map.class));
expect(cycle.renderStackPop()).andReturn(component);
@@ -230,7 +250,7 @@
verify();
- assertBuffer("<span class=\"prefix\"><select name=\"fred\" autocomplete=\"off\" id=\"fred\" class=\"validation-delegate\"> </select></span>");
+ assertBuffer(outcome);
}
public void test_Render_JSON()