You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mu...@apache.org on 2007/02/23 02:04:19 UTC
svn commit: r510742 - in /struts/struts2/branches/STRUTS_2_0_X/core/src:
main/java/org/apache/struts2/components/
main/java/org/apache/struts2/views/jsp/ui/
main/resources/org/apache/struts2/static/dojo/struts/widget/
main/resources/template/ajax/ site...
Author: musachy
Date: Thu Feb 22 17:04:18 2007
New Revision: 510742
URL: http://svn.apache.org/viewvc?view=rev&rev=510742
Log:
WW-1659:
* Update autocompleter to accept JSON generated using the JSON plugin
* Add "dataFieldName" to identify the field to be used as the data source in the returned JSON string
Modified:
struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/Autocompleter.java
struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/views/jsp/ui/AutocompleterTag.java
struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/org/apache/struts2/static/dojo/struts/widget/ComboBox.js
struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/template/ajax/autocompleter.ftl
struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/autocompleter.html
struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/views/jsp/ui/AutocompleterTest.java
struts/struts2/branches/STRUTS_2_0_X/core/src/test/resources/org/apache/struts2/views/jsp/ui/Autocompleter-1.txt
Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/Autocompleter.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/Autocompleter.java?view=diff&rev=510742&r1=510741&r2=510742
==============================================================================
--- struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/Autocompleter.java (original)
+++ struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/Autocompleter.java Thu Feb 22 17:04:18 2007
@@ -31,15 +31,7 @@
/**
* <p>The autocomplete tag is a combobox that can autocomplete text entered on the input box.
* When used on the "simple" theme, the autocompleter can be used like the ComboBox.
- * When used on the "ajax" theme, the list can be retieved from an action. This action must
- * return a JSON list in the format:</p>
- * <pre>
- * [
- * ["Text 1","Value1"],
- * ["Text 2","Value2"],
- * ["Text 3","Value3"]
- * ]
- * </pre>
+ * When used on the "ajax" theme, the list can be retieved from an action. </p>
* <!-- START SNIPPET: ajaxJavadoc -->
* <B>THE FOLLOWING IS ONLY VALID WHEN AJAX IS CONFIGURED</B>
* <ul>
@@ -75,6 +67,7 @@
* 'keyName' name of the field to which the selected key will be assigned<p/>
* 'iconPath' path of icon used for the dropdown
* 'templateCssPath' path to css file used to customize Dojo's widget
+ * 'dataFieldName' name of the field to be used as the list in the returned JSON string<p/>
* 'notifyTopics' comma separated list of topics names, that will be published. Three parameters are passed:<p/>
* <ul>
* <li>data: selected value when type='valuechanged'</li>
@@ -107,6 +100,7 @@
protected String templateCssPath;
protected String iconPath;
protected String keyName;
+ protected String dataFieldName;
public Autocompleter(ValueStack stack, HttpServletRequest request,
HttpServletResponse response) {
@@ -169,6 +163,8 @@
addParameter("templateCssPath", findString(templateCssPath));
if(iconPath != null)
addParameter("iconPath", findString(iconPath));
+ if(dataFieldName != null)
+ addParameter("dataFieldName", findString(dataFieldName));
if(keyName != null)
addParameter("keyName", findString(keyName));
else {
@@ -284,5 +280,10 @@
@StrutsTagAttribute(description="Name of the field to which the selected key will be assigned")
public void setKeyName(String keyName) {
this.keyName = keyName;
+ }
+
+ @StrutsTagAttribute(description="Name of the field in the returned JSON object that contains the data array", defaultValue="Value specified in 'name'")
+ public void setDataFieldName(String dataFieldName) {
+ this.dataFieldName = dataFieldName;
}
}
Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/views/jsp/ui/AutocompleterTag.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/views/jsp/ui/AutocompleterTag.java?view=diff&rev=510742&r1=510741&r2=510742
==============================================================================
--- struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/views/jsp/ui/AutocompleterTag.java (original)
+++ struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/views/jsp/ui/AutocompleterTag.java Thu Feb 22 17:04:18 2007
@@ -53,6 +53,7 @@
protected String templateCssPath;
protected String iconPath;
protected String keyName;
+ protected String dataFieldName;
public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
return new Autocompleter(stack, req, res);
@@ -81,6 +82,7 @@
autocompleter.setTemplateCssPath(templateCssPath);
autocompleter.setIconPath(iconPath);
autocompleter.setKeyName(keyName);
+ autocompleter.setDataFieldName(dataFieldName);
}
public void setAutoComplete(String autoComplete) {
@@ -161,5 +163,9 @@
public void setKeyName(String keyName) {
this.keyName = keyName;
+ }
+
+ public void setDataFieldName(String dataFieldName) {
+ this.dataFieldName = dataFieldName;
}
}
Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/org/apache/struts2/static/dojo/struts/widget/ComboBox.js
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/org/apache/struts2/static/dojo/struts/widget/ComboBox.js?view=diff&rev=510742&r1=510741&r2=510742
==============================================================================
--- struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/org/apache/struts2/static/dojo/struts/widget/ComboBox.js (original)
+++ struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/org/apache/struts2/static/dojo/struts/widget/ComboBox.js Thu Feb 22 17:04:18 2007
@@ -63,12 +63,28 @@
dojo.html.hide(this.cbox.indicator);
this.cbox.notify.apply(this.cbox, [data, type, evt]);
- if(!dojo.lang.isArray(data)){
- var arrData = [];
- for(var key in data){
- arrData.push([data[key], key]);
- }
- data = arrData;
+ if(!dojo.lang.isArray(data)) {
+ //if there is a dataFieldName, take it
+ if(!dojo.string.isBlank(this.cbox.dataFieldName) && data[this.cbox.dataFieldName] != null) {
+ arrData = data[this.cbox.dataFieldName];
+ } else {
+ //try to find a match
+ var arrData = null;
+ for(var key in data){
+ //does it start with the field name? take it
+ if(key == this.cbox.name) {
+ arrData = data[key];
+ break;
+ }
+ //grab the first array found, we will use it if nothing else
+ //is found
+ if(!arrData && dojo.lang.isArray(data[key])) {
+ arrData = data = data[key];
+ }
+ }
+ }
+
+ data = arrData;
}
this.setData(data);
}),
@@ -167,6 +183,13 @@
this.setData = function(/*Array*/ pdata){
// populate this.data and initialize lookup structures
this.data = pdata;
+ //all ellements must be a key and value pair
+ for(var i = 0; i < this.data.length; i++) {
+ var element = this.data[i];
+ if(!dojo.lang.isArray(element)) {
+ this.data[i] = [element, element];
+ }
+ }
};
if(dataPairs){
@@ -205,6 +228,7 @@
//dojo has "stringstart" which is invalid
searchType: "STARTSTRING",
+ dataFieldName : "" ,
keyName: "",
templateCssPath: dojo.uri.dojoUri("struts/ComboBox.css"),
//from Dojo's ComboBox
Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/template/ajax/autocompleter.ftl
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/template/ajax/autocompleter.ftl?view=diff&rev=510742&r1=510741&r2=510742
==============================================================================
--- struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/template/ajax/autocompleter.ftl (original)
+++ struts/struts2/branches/STRUTS_2_0_X/core/src/main/resources/template/ajax/autocompleter.ftl Thu Feb 22 17:04:18 2007
@@ -86,6 +86,9 @@
<#if parameters.templateCssPath?if_exists != "">
templateCssPath="<@s.url value='${parameters.templateCssPath}' encode="false" includeParams='none'/>"
</#if>
+<#if parameters.dataFieldName?if_exists != "">
+ dataFieldName="${parameters.dataFieldName?html}"
+</#if>
<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
>
Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/autocompleter.html
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/autocompleter.html?view=diff&rev=510742&r1=510741&r2=510742
==============================================================================
--- struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/autocompleter.html (original)
+++ struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/autocompleter.html Thu Feb 22 17:04:18 2007
@@ -60,6 +60,14 @@
<td align="left" valign="top">The css style definitions for element ro use</td>
</tr>
<tr>
+ <td align="left" valign="top">dataFieldName</td>
+ <td align="left" valign="top">false</td>
+ <td align="left" valign="top">Value specified in 'name'</td>
+ <td align="left" valign="top">true</td>
+ <td align="left" valign="top">String</td>
+ <td align="left" valign="top">Name of the field in the returned JSON object that contains the data array</td>
+ </tr>
+ <tr>
<td align="left" valign="top">delay</td>
<td align="left" valign="top">false</td>
<td align="left" valign="top">100</td>
Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/views/jsp/ui/AutocompleterTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/views/jsp/ui/AutocompleterTest.java?view=diff&rev=510742&r1=510741&r2=510742
==============================================================================
--- struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/views/jsp/ui/AutocompleterTest.java (original)
+++ struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/views/jsp/ui/AutocompleterTest.java Thu Feb 22 17:04:18 2007
@@ -49,6 +49,7 @@
tag.setShowDownArrow("false");
tag.setIconPath("i");
tag.setTemplateCssPath("j");
+ tag.setDataFieldName("k");
tag.doStartTag();
tag.doEndTag();
Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/test/resources/org/apache/struts2/views/jsp/ui/Autocompleter-1.txt
URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/test/resources/org/apache/struts2/views/jsp/ui/Autocompleter-1.txt?view=diff&rev=510742&r1=510741&r2=510742
==============================================================================
--- struts/struts2/branches/STRUTS_2_0_X/core/src/test/resources/org/apache/struts2/views/jsp/ui/Autocompleter-1.txt (original)
+++ struts/struts2/branches/STRUTS_2_0_X/core/src/test/resources/org/apache/struts2/views/jsp/ui/Autocompleter-1.txt Thu Feb 22 17:04:18 2007
@@ -16,4 +16,5 @@
loadMinimum="3"
visibleDownArrow="false"
buttonSrc="i"
- templateCssPath="j">
+ templateCssPath="j"
+ dataFieldName="k">